/* ==========================================================================
   glass.css — **קובץ המחלקות של שפת הזכוכית. מקור אמת יחיד.**
   ==========================================================================
   כל טשטוש רקע במערכת מוגדר כאן ורק כאן. הכלל שנועל את זה:

       grep -n "backdrop-filter" web/*.css   →   רק glass.css

   שינוי במתכון = מקום אחד, וכל המסכים מקבלים אותו.
   ‏`prefers-reduced-*` ו-`@supports` יושבים גם הם כאן, ולכן הם חלים על כל
   מסך אוטומטית ולא צריך לזכור אותם פר-מסך.

   ארבע המחלקות:
     ‏.glass-lens    — **פקד**: קצה נוצץ, בליק, צל קרוב, התרוממות ולחיצה.
     ‏.gl-flat       — פקד בתוך כרטיס אטום: אותו rim וצל, בלי טשטוש.
     ‏.glass-surface — **כרטיס תוכן**: משטח בלבד. אין לו rim, אין בליק, ואין
                       hover — הוא לא פקד. (הכרעת טל 10/08: לשמר את המראה
                       הקיים בדיוק, רק להעביר אותו לכאן.)
     ‏.glass-strong  — **סרגל דביק / פאנל צף**: טשטוש חזק יותר וקצה עליון.

   ⚠️⚠️ **כיוון האור אחיד בכל המערכת** ומתהפך תחת `dir="ltr"`, בדיוק כמו שני
   מקורות האור של רקע העמוד. שני פקדים שמוארים מכיוונים שונים שוברים את
   אשליית החומר.
   ⚠️ **מה שלא מקבל זכוכית:** כפתור ראשי · כפתור סמנטי-קריטי (מחיקה, ביטול,
   אישור/דחייה) · באדג׳י סטטוס (מידע, לא פקד) · שדות קלט · טבלאות ·
   כרטיס ההתחברות · מסמכי PDF ומיילים.
   ========================================================================== */

/* ==========================================================================
   Liquid Glass — `.glass-lens`
   אושר ב-glass-lab. שלוש השכבות שיוצרות "עדשה" ולא "blur שטוח":
     1 · קצה נוצץ (rim) — אור שנתפס בעובי הזכוכית, חזק למעלה ודועך בצדדים.
     2 · עומק פנימי — בליק רך בפינה העליונה, תחתית מעט כהה.
     3 · צל קרוב ורך — הפקד מרחף מעל המשטח.
   ⚠️⚠️ **כיוון האור נגזר מכיוון הכתיבה** ומתהפך תחת `dir="ltr"`, בדיוק כמו
   שני מקורות האור של רקע העמוד (`--bg-mesh`). שני פקדים שמוארים מכיוונים
   שונים שוברים את אשליית החומר.
   ⚠️ **`.gl-flat` לפקד שיושב בתוך כרטיס אטום**: אין שם מה לטשטש, ובועה לבנה
   על רקע לבן נעלמת. אותו rim ואותו צל — רק בלי blur ועם מסלול מגוון.
   ========================================================================== */
.glass-lens {
  position: relative;
  background: rgba(255,255,255,.58);
  -webkit-backdrop-filter: blur(22px) saturate(185%);
          backdrop-filter: blur(22px) saturate(185%);
  border: 0; border-radius: 980px; color: var(--ink);
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.55),
    inset 0 1.5px 1px rgba(255,255,255,.95),
    inset 0 -1px 1px rgba(255,255,255,.35),
    inset 0 -6px 12px -6px rgba(30,40,60,.08),
    0 2px 6px rgba(20,28,44,.08),
    0 10px 24px -6px rgba(20,28,44,.16);
  transition: box-shadow .22s var(--ease-out), transform .14s var(--ease-out),
              background .22s var(--ease-out);
}
.glass-lens::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit;
  pointer-events: none; opacity: .9;
  background: radial-gradient(60% 45% at 70% 0%, rgba(255,255,255,.75), transparent 70%);
  transition: opacity .22s var(--ease-out);
}
html[dir="ltr"] .glass-lens::before {
  background: radial-gradient(60% 45% at 30% 0%, rgba(255,255,255,.75), transparent 70%);
}
.glass-lens > * { position: relative; z-index: 1; }
.glass-lens:hover {
  background: rgba(255,255,255,.66); transform: translateY(-2px);
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.62), inset 0 1.5px 1px rgba(255,255,255,1),
    inset 0 -1px 1px rgba(255,255,255,.4), inset 0 -6px 12px -6px rgba(30,40,60,.07),
    0 3px 8px rgba(20,28,44,.09), 0 16px 32px -8px rgba(20,28,44,.2);
}
.glass-lens:hover::before { opacity: 1; }
/* ==========================================================================
   ⚠️⚠️ **הלחיצה — מכוילת כאן, במקום אחד, לכל הפקדים.** 11/08/2026, אחרי
   שטל דיווח שהכפתורים "נכנסים פנימה" חזק מדי. `scale(.97)` הוא 3% — על
   כפתור של 44px זו תזוזה של יותר מפיקסל בכל צד, והצל שנעלם כמעט לגמרי
   הוסיף תחושת שקיעה. עכשיו `--press` = 0.99 (1%), ~110ms, והצל **מתקצר**
   ולא נעלם. הלחיצה צריכה להרגיש **מאשרת**, לא שוקעת.
   ⚠️ **כל פקד חדש יורש מכאן.** אין `:active { transform }` פר-כפתור —
   כיול בשני מקומות פירושו שאחד מהם נשאר מוגזם ואף אחד לא יודע איזה.
   ========================================================================== */
:root { --press: .99; --press-t: 110ms; }
.glass-lens:active {
  transform: scale(var(--press));
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.5), inset 0 1.5px 1px rgba(255,255,255,.8),
    inset 0 -6px 12px -6px rgba(30,40,60,.12),
    0 1px 3px rgba(20,28,44,.1), 0 6px 14px -6px rgba(20,28,44,.14);
  transition-duration: var(--press-t);
}
/* ⚠️ מי שמבקש פחות תנועה לא מקבל `scale` בכלל — רק הצל מגיב. */
@media (prefers-reduced-motion: reduce) {
  :root { --press: 1; }
}
.glass-lens.gl-card { border-radius: 15px; }
/* פקד בתוך כרטיס אטום — הנפח מגיע מהצללים, לא מהטשטוש */
.glass-lens.gl-flat {
  background: rgba(118,118,128,.1);
  -webkit-backdrop-filter: none; backdrop-filter: none;
}
.glass-lens.gl-flat:hover { background: rgba(118,118,128,.15); }

html[data-theme="dark"] .glass-lens {
  background: rgba(255,255,255,.085); color: var(--ink);
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.14), inset 0 1.5px 1px rgba(255,255,255,.3),
    inset 0 -1px 1px rgba(255,255,255,.08), inset 0 -6px 12px -6px rgba(0,0,0,.4),
    0 2px 6px rgba(0,0,0,.34), 0 10px 24px -6px rgba(0,0,0,.5);
}
html[data-theme="dark"] .glass-lens::before {
  background: radial-gradient(60% 45% at 70% 0%, rgba(255,255,255,.22), transparent 70%);
}
html[dir="ltr"][data-theme="dark"] .glass-lens::before {
  background: radial-gradient(60% 45% at 30% 0%, rgba(255,255,255,.22), transparent 70%);
}
html[data-theme="dark"] .glass-lens:hover {
  background: rgba(255,255,255,.13);
  box-shadow:
    inset 0 0 0 1px rgba(255,255,255,.2), inset 0 1.5px 1px rgba(255,255,255,.38),
    inset 0 -6px 12px -6px rgba(0,0,0,.38), 0 3px 8px rgba(0,0,0,.36),
    0 16px 32px -8px rgba(0,0,0,.55);
}
html[data-theme="dark"] .glass-lens.gl-flat { background: rgba(255,255,255,.07); }
html[data-theme="dark"] .glass-lens.gl-flat:hover { background: rgba(255,255,255,.11); }


/* ══════════════════════════════════════════════════════════════════════
   `.sq-gl` — הזכוכית של חלון בקשת ההצעה, **במובייל בלבד** (30/08/2026)
   ⚠️⚠️ **המחלקה חסרת כללים מעל 768px**, ולכן הדסקטופ אינו זז: היא יושבת
   על ה-HTML בשני המצבים ומקבלת חומר רק כשיש מסך קטן.
   ⚠️⚠️ **rim לפני blur.** מה שיוצר את העדשה הוא ההבהוב הפנימי העליון;
   בלעדיו זה טשטוש ולא חומר. הבליק (`::before`) ב-RTL ב-`at 70% 0%`.
   ⚠️ **הצל לפי תפקיד**: כותרת מצילה כלפי מטה, סרגל תחתון כלפי מעלה.
   ⚠️⚠️ **אסור על מה שנגלל**: לא על עמודת התוכן ולא על הכרטיסים —
   ‏`backdrop-filter` על שטח גדול שנגלל הורג פריימים במובייל.
   ══════════════════════════════════════════════════════════════════════ */
@media (max-width: 767px) {
  /* ⚠️ כותרת מקטע **סגור** אינה מרחפת — ולכן אינה נושאת חומר, ולא
     משלמת על טשטוש שאיש אינו רואה. */
  /* ⚠️⚠️ **בלי `position` כאן.** כותרת המקטע הפתוח היא `sticky`
     (‏`sea.css`), ו-`glass.css` נטען אחריו — `position: relative` כאן
     היה דורס אותה והסטיקי היחיד בעמוד היה נעלם בשקט. ‏`sticky` יוצר
     בלוק מכיל בעצמו, ולכן ה-`::before` עדיין נעגן נכון. */
  .sq-gl:not(.sq-sec-h) { position: relative; }
  .sq-gl:not(.sq-sec-h), .sq-sec.open > .sq-sec-h.sq-gl {
    background: rgba(255,255,255,.58);
    -webkit-backdrop-filter: blur(22px) saturate(185%);
            backdrop-filter: blur(22px) saturate(185%);
    box-shadow: inset 0 0 0 1px rgba(255,255,255,.55),
                inset 0 1.5px 1px rgba(255,255,255,.95),
                0 2px 6px rgba(20,28,44,.08);
    transition: box-shadow .22s var(--ease-out), background .22s var(--ease-out); }
  .sq-gl:not(.sq-sec-h)::before,
  .sq-sec.open > .sq-sec-h.sq-gl::before { content: ""; position: absolute; inset: 0; border-radius: inherit;
    pointer-events: none; opacity: .9;
    background: radial-gradient(60% 45% at 70% 0%, rgba(255,255,255,.75), transparent 70%); }
  .sq-gl:not(.sq-sec-h) > *, .sq-sec.open > .sq-sec-h.sq-gl > * {
    position: relative; z-index: 1; }
  html[dir="ltr"] .sq-gl::before {
    background: radial-gradient(60% 45% at 30% 0%, rgba(255,255,255,.75), transparent 70%); }
  html[data-theme="dark"] .sq-gl:not(.sq-sec-h),
  html[data-theme="dark"] .sq-sec.open > .sq-sec-h.sq-gl {
    background: rgba(255,255,255,.085);
    box-shadow: inset 0 0 0 1px rgba(255,255,255,.14),
                inset 0 1.5px 1px rgba(255,255,255,.3),
                0 2px 6px rgba(0,0,0,.34); }
  html[data-theme="dark"] .sq-gl::before {
    background: radial-gradient(60% 45% at 70% 0%, rgba(255,255,255,.22), transparent 70%); }
}


/* ══════════════════════════════════════════════════════════════════════
   `.seg-well` — **מסלול הבקר המקוטע**, לכל המערכת (31/08/2026)
   ⚠️⚠️ **הבקר הוא `.seg` + `.seg-bubble` + `segPlace` שכבר קיימים.** מה
   שהיה חסר הוא המסלול: כל מסך צייר לעצמו רקע אחר, ומכאן שלוש שפות
   לאותו פקד. `.seg-well` הוא המסלול, ומכאן ואילך אין רקע מקומי.
   ⚠️⚠️ **גוון דיו ולא לבן־שקוף.** לבן ב-42% עם `backdrop-filter` מעל אב
   אטום נמדד **189 אפור** — הטשטוש דוגם משטח שאין מאחוריו כלום וחוזר
   כהה. גוון דיו נמדד 242, כלומר באר בהירה, והחומר נשאר חומר.
   ⚠️ **בלי `isolation` כאן**: בידוד על אלמנט שיש לו `backdrop-filter`
   הופך אותו לשורש ה-backdrop של עצמו — ואז אין מה לטשטש, ואותו אפור חוזר.
   ⚠️ הפריט הפעיל הוא `.seg-bubble`: rim + בליק + צל קרוב, וזז ב-transform.
   ══════════════════════════════════════════════════════════════════════ */
.seg.seg-well {
  background: rgba(20,28,44,.055);
  -webkit-backdrop-filter: blur(18px) saturate(180%);
          backdrop-filter: blur(18px) saturate(180%);
  box-shadow: inset 0 1px 3px rgba(20,28,44,.09),
              inset 0 0 0 1px rgba(20,28,44,.04); }
html[data-theme="dark"] .seg.seg-well {
  background: rgba(0,0,0,.28);
  box-shadow: inset 0 1px 3px rgba(0,0,0,.5),
              inset 0 0 0 1px rgba(255,255,255,.05); }
/* ⚠️ פוקוס = `outline` ולא `box-shadow` — הצללית דורסת את ה-rim. */
.seg.seg-well button:focus-visible { outline: 2px solid var(--brand);
  outline-offset: 2px; }

/* ---- fallbacks ---- */
/* אין תמיכה ב-backdrop-filter ⇒ משטח אטום. הנפח נשמר — הוא מגיע מהצללים. */
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .glass-lens, .sq-gl { background: rgba(255,255,255,.92); }
  .seg.seg-well { background: rgba(20,28,44,.07); }
  html[data-theme="dark"] .glass-lens,
  html[data-theme="dark"] .sq-gl { background: rgba(40,44,54,.96); }
  html[data-theme="dark"] .seg.seg-well { background: rgba(0,0,0,.4); }
}
/* המשתמש ביקש פחות שקיפות — אטום מלא, בלי blur ובלי בליק */
@media (prefers-reduced-transparency: reduce) {
  .seg.seg-well { -webkit-backdrop-filter: none; backdrop-filter: none;
    background: color-mix(in srgb, var(--ink) 7%, var(--card)); }
  .glass-lens, .sq-gl { background: var(--card);
    -webkit-backdrop-filter: none; backdrop-filter: none; }
  .glass-lens::before, .sq-gl::before { display: none; }
  /* ⚠️ הבועה קיבלה blur ב-13/08 ⇒ היא חייבת להופיע כאן. כלל שנוסף עם טשטוש
     ואינו נכנס לבלוק הזה מחזיר שקיפות למי שביקש במפורש בלעדיה. */
  .seg-bubble { background: var(--card); -webkit-backdrop-filter: none; backdrop-filter: none; }
  html[data-theme="dark"] .seg-bubble { background: rgba(255,255,255,.22); }
}
/* המשתמש ביקש פחות תנועה — בלי התרוממות, בלי בועה קופצת */
@media (prefers-reduced-motion: reduce) {
  .glass-lens, .glass-lens::before, .seg-bubble, .sq-gl,
  .seg.seg-well { transition: none; }
  .glass-lens:hover { transform: none; }
}

/* ---- הכפתור הראשי נשאר אטום: הוא לא זכוכית ---- */
.pbtn {
  position: relative; overflow: hidden;
  display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 20px;
  border: 0; border-radius: 980px; font: inherit; font-size: 13.5px; font-weight: 700;
  cursor: pointer; color: #fff;
  background: linear-gradient(135deg, var(--brand) 0%, var(--brand-dark) 100%);
  /* ⚠️ צל **ניטרלי וקרוב**. הילה אדומה רחבה קוראת כמו ניאון בדארק ושוברת את
     הכלל "צל תמיד למטה, קרוב ורך". */
  box-shadow: 0 2px 6px rgba(20,28,44,.18), 0 8px 18px -8px rgba(122,10,14,.42);
  transition: transform .14s var(--ease-out), box-shadow .2s var(--ease-out);
}
.pbtn::before { content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, rgba(255,255,255,.15), transparent 55%); }
.pbtn:hover { box-shadow: 0 3px 9px rgba(20,28,44,.2), 0 14px 26px -10px rgba(122,10,14,.5); }
/* ⚠️ הכפתור הראשי צורך את אותו `--press` — ראה הכיול ליד `.glass-lens:active`. */
.pbtn:active { transform: scale(var(--press)); transition-duration: var(--press-t); }
.pbtn .ic { width: 16px; height: 16px; }
@media (prefers-reduced-motion: reduce) { .pbtn { transition: none; } }

/* ==========================================================================
   רצועה דביקה מכווצת (תיק לקוח)
   ========================================================================== */
#cf-stick { position: fixed; z-index: 60; inset-inline: 0; inset-block-start: 10px;
  display: flex; justify-content: center; pointer-events: none;
  opacity: 0; transform: translateY(-14px);
  transition: opacity .26s var(--ease-out), transform .26s var(--ease-out); }
#cf-stick.on { opacity: 1; transform: none; }
/* פס דהייה — התוכן נמוג לתוך הרקע במקום להתנגש ברצועה */
#cf-stick::before { content: ""; position: absolute; inset-inline: 0; inset-block-start: -12px;
  height: 84px; pointer-events: none; z-index: -1;
  background: linear-gradient(to bottom, var(--bg) 34%, transparent); }
#cf-stick .gstrip { pointer-events: auto; display: flex; align-items: center; gap: 11px;
  padding: 8px 10px 8px 16px; border-radius: 980px; max-width: min(100% - 24px, 720px); }
/* ⚠️ השם לעולם לא נדחס עד שבירה: רוחב מינימלי מובטח, וחיתוך ellipsis נקי.
   הכפתור והתג הם flex:none ולכן הם מוותרים אחרונים. */
#cf-stick .nm { font-weight: 800; font-size: 15px; white-space: nowrap; overflow: hidden;
  text-overflow: ellipsis; min-width: 8ch; flex: 1 1 auto; }
#cf-stick .ci-chip, #cf-stick .gbtn { flex: none; }
#cf-stick .sp { margin-inline-start: auto; }
@media (prefers-reduced-motion: reduce) { #cf-stick { transition: none; } }

/* ==========================================================================
   פקדי זכוכית בתיק הלקוח
   ========================================================================== */
.gbtn { display: inline-flex; align-items: center; gap: 7px; height: 38px; padding: 0 15px;
  font: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer;
  text-decoration: none; color: var(--ink); }
.gbtn .ic { width: 16px; height: 16px; flex: none; }
.gib { width: 36px; height: 36px; display: inline-flex; align-items: center;
  justify-content: center; cursor: pointer; padding: 0; }
.gib .ic { width: 16px; height: 16px; }

/* ==========================================================================
   .glass-surface — כרטיס תוכן
   ⚠️ **לא פקד**: בלי rim, בלי בליק, בלי hover. הערכים הועברו כלשונם מהכללים
   שהיו פזורים ב-styles.css כדי שהמראה הקיים יישמר בדיוק.
   ========================================================================== */
.glass-surface {
  background: rgba(255,255,255,.72);
  -webkit-backdrop-filter: blur(30px) saturate(180%);
          backdrop-filter: blur(30px) saturate(180%);
  border: .5px solid rgba(255,255,255,.6);
  box-shadow: 0 1px 2px rgba(0,0,0,.04), 0 8px 30px rgba(0,0,0,.06);
}
html[data-theme="dark"] .glass-surface {
  background: rgba(26,31,39,.72);
  border-color: rgba(255,255,255,.08);
  box-shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 30px rgba(0,0,0,.5);
}

/* ==========================================================================
   .glass-strong — סרגל דביק / פאנל צף
   טשטוש חזק יותר (התוכן זז מתחתיו) + קצה עליון בהיר.
   ========================================================================== */
.glass-strong {
  background: rgba(250,250,252,.86);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
          backdrop-filter: blur(40px) saturate(180%);
  border: .5px solid rgba(255,255,255,.7);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.65),
              0 1px 2px rgba(0,0,0,.06), 0 12px 34px rgba(0,0,0,.12);
}
html[data-theme="dark"] .glass-strong {
  background: rgba(20,24,31,.86);
  border-color: rgba(255,255,255,.1);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.12),
              0 1px 2px rgba(0,0,0,.5), 0 12px 34px rgba(0,0,0,.6);
}

@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .glass-surface { background: rgba(255,255,255,.96); }
  .glass-strong  { background: rgba(250,250,252,.98); }
  html[data-theme="dark"] .glass-surface { background: rgba(26,31,39,.97); }
  html[data-theme="dark"] .glass-strong  { background: rgba(20,24,31,.98); }
}
@media (prefers-reduced-transparency: reduce) {
  .glass-surface, .glass-strong {
    -webkit-backdrop-filter: none; backdrop-filter: none;
    background: var(--card);
  }
  html[data-theme="dark"] .glass-surface,
  html[data-theme="dark"] .glass-strong { background: var(--surface); }
}

/* ==========================================================================
   גל 1 · ניווט עליון · תפריט · הודעות משוב
   ========================================================================== */
/* גלולת הניווט — פקד, ולכן `.glass-lens` מלא. הגובה והרוחב נשארים כפי שהיו:
   44px זהה לכפתור ה-+ כדי ששניהם יישבו על אותו קו. */
.nav-pill {
  display: inline-flex; align-items: stretch; overflow: hidden;
  border-radius: 980px; min-height: 44px; max-width: calc(100vw - 76px);
}
/* ⚠️ התג יושב **בתוך** הגלולה, שכבר מטשטשת. טשטוש שני על אותו אזור אינו
   מוסיף דבר ורק עולה בביצועים — ולכן `gl-flat`. */
.nav-pill .sys-badge { border-radius: 0; }
/* ⚠️ **משטח קריאה גדול ⇒ אטימות גבוהה יותר.** התפריט מציג 20+ שורות טקסט
   קטן, ובאטימות של סרגל דביק רגיל (.86) התיאורים נמדדו מתחת ל-AA. הכלל
   שנקבע: כשהניגודיות נשברת — מעלים את אטימות הרקע, לא מקטינים את הטקסט. */
.nav-panel { background: rgba(250,250,252,.94); }
html[data-theme="dark"] .nav-panel { background: rgba(20,24,31,.94); }
.nav-panel {
  position: absolute; top: calc(100% + 8px); right: 50%;
  transform: translate(50%, -8px) scale(.98);
  width: min(940px, 94vw); max-height: 76vh; overflow-y: auto;
  border-radius: 22px; padding: 16px; opacity: 0; pointer-events: none;
  transition: opacity .22s var(--ease-drawer), transform .28s var(--ease-drawer);
}
/* כפתורי הכותרת */
.hdr-icon-btn {
  width: 38px; height: 38px; border-radius: 50%; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--ink); font: inherit;
}
.logout-btn {
  padding: 8px 15px; border-radius: 980px; font-size: 13px; font-weight: 700;
  cursor: pointer; font-family: inherit; color: var(--brand-ink);
}
/* ⚠️ **האווטאר נשאר אטום**: הוא נושא את צבע המותג, ובדיוק כמו הכפתור הראשי
   הוא אינו זכוכית. */

/* ⚠️⚠️ **הודעת המשוב שומרת על הצבע האטום שלה.** ירוק=הצליח, אדום=נכשל —
   הצבע **הוא** ההודעה, וטשטוש היה מדלל אותו בדיוק ברגע שבו צריך לקרוא מהר.
   מה שכן עובר לשפה: הקצה הבהיר והצל הרך. */
.toast {
  color: #fff; padding: 11px 17px; border-radius: 12px; margin-top: 8px;
  font-size: 14px; font-weight: 600; opacity: 0; transform: translateY(10px);
  transition: opacity .25s var(--ease-out), transform .25s var(--ease-out);
  background: var(--ink);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.18),
              0 2px 6px rgba(20,28,44,.18), 0 12px 28px -8px rgba(20,28,44,.4);
}
.toast.show { opacity: 1; transform: translateY(0); }
.toast-ok { background: #15803d; }
.toast-err { background: #b91c1c; }
@media (prefers-reduced-motion: reduce) { .toast { transition: none; } }


/* ==========================================================================
   .seg — segmented control (רכיב מערכת)
   מסלול `gl-flat` + בועה שזזה בין הסגמנטים. ⚠️ מיקום הבועה נמדד **מהכפתור
   עצמו** ולא מאינדקס — כך היא נכונה ב-RTL, באנגלית, וכשהמונים משנים רוחב.
   ========================================================================== */
/* ⚠️ ‏`gl-flat`: הסגמנט יושב בתוך כרטיס אטום — rim וצל, בלי blur. */
.seg { display: inline-flex; position: relative; padding: 4px; border-radius: 980px;
  max-width: 100%; margin-bottom: 18px; }
/* ⚠️ `left:0` מקבע את נקודת האפס לתיבת ה-padding, כך שהחישוב ב-shared.js
   אינו תלוי ב-padding של סרגל מסוים. */
/* ⚠️⚠️ **הבועה היא זכוכית, והמעבר נקי ולא קופץ** (הכרעת טל 13/08). היא הייתה
   `var(--card)` אטום עם `--ease-pop` — עקומת overshoot (‏1.42) שחוזרת אחורה
   בסוף התנועה, וזה מה שנקרא "לא חלק". עכשיו `--ease-out` בלי חריגה.
   ⚠️ **`--ease-pop` נשאר בשימוש במקומות אחרים** — לא להחליף אותו גלובלית.
   ⚠️ הרוחב מונפש יחד עם המיקום, ולכן **הרוחב חייב להיקבע לפני האנימציה**:
   ‏`segPlace` נקרא **אחרי** החלפת המחלקה `on`, אחרת הבועה מקבלת את הרוחב הישן
   ו"בורחת מהמסלול" (הבאג המתועד למטה ב-`.atb-bub`). */
.seg-bubble { position: absolute; left: 0; top: 4px; bottom: 4px; border-radius: 980px;
  background: rgba(255,255,255,.62); z-index: 0;
  -webkit-backdrop-filter: blur(20px) saturate(180%);
          backdrop-filter: blur(20px) saturate(180%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.6),
              inset 0 1.5px 1px rgba(255,255,255,.95),
              0 1px 2px rgba(20,28,44,.08),
              0 6px 14px -6px rgba(20,28,44,.22);
  transition: transform .26s var(--ease-out), width .26s var(--ease-out); }
/* ⚠️⚠️ **בדארק הערך חייב להישאר כהה.** ‏`.62` לבן על רקע כהה מבליע את הטקסט
   הבהיר של הסגמנט הפעיל — נמדד ונשמר מרווח AA בשני המצבים. */
/* ⚠️⚠️ **בועת בורר השירות אינה מטשטשת — והיא לא אמורה.** המילוי שלה הוא
   לבן 98%→82%, כלומר אין כמעט רקע שייראה דרכה, אבל `backdrop-filter`
   בכל זאת מקדם אותה לשכבת קומפוזיטינג — ו-WebKit אינו תמיד מחיל את
   החיתוך המעוגל על שכבה כזאת, כך שהפינות יוצאות מרובעות (המלכודת
   המתועדת ב-CLAUDE.md). נמדד בכרום: הסרת הטשטוש משנה **188 פיקסלים
   מתוך 103,088**, הפרש מרבי 10/255 — כלומר בלתי נראית כאן, ומצילה את
   הפינות שם. ⚠️ הבועה הגנרית (רצועת הטריאז') **כן** מטשטשת: המילוי
   שלה הוא 62% ורואים דרכה. */
.svc-switch .seg-bubble { -webkit-backdrop-filter: none; backdrop-filter: none; }

html[data-theme="dark"] .seg-bubble { background: rgba(255,255,255,.16);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.14),
              inset 0 1px 1px rgba(255,255,255,.3), 0 6px 14px -6px rgba(0,0,0,.6); }
/* ⚠️⚠️ **עמעום דרך `color` ולא דרך `opacity`.** ‏`opacity` מוכפל לאורך העץ
   ואי אפשר לבטל אותו בילד: המונה קיבל `color:var(--ink)` וירד ל-3.59:1 כי
   ‏.64 של האב הוכפל ב-.92 שלו. עם `color` הילד פשוט מגדיר את שלו. */
.seg button { position: relative; z-index: 1; border: 0; background: none; font: inherit;
  font-size: 13.5px; font-weight: 700; color: #4a5563; cursor: pointer;
  height: 34px; padding: 0 16px; border-radius: 980px; white-space: nowrap;
  display: inline-flex; align-items: center; gap: 7px; transition: color .22s var(--ease-out); }
.seg button.on { color: var(--ink); }
/* ⚠️ ‏`--muted` נמדד **בדיוק 4.50** על מסלול הסגמנט — על הסף ובלי שוליים.
   גוון אחד כהה יותר נותן מרווח, ועדיין נבדל בבירור מהסגמנט הפעיל. */
html[data-theme="dark"] .seg button { color: #b9c2cf; }
html[data-theme="dark"] .seg button.on { color: var(--ink); }
/* ⚠️ צבע מפורש ולא ירושה: `.seg button` יושב על `opacity:.64`, והמונה ירש את
   העמעום הזה ונמדד 4.4. עמעום של אב נכנס לחישוב הניגודיות. */
.seg .n { font-size: 11px; font-weight: 800; border-radius: 980px; padding: 1px 6px;
  background: rgba(20,28,44,.1); color: var(--ink); font-variant-numeric: tabular-nums; }
html[data-theme="dark"] .seg { background: rgba(255,255,255,.07); }
html[data-theme="dark"] .seg .n { background: rgba(255,255,255,.16); color: #e8ecf1; }

/* ==========================================================================
   .gl-on-color — פקד זכוכית על משטח **צבעוני או כהה**
   ⚠️ הווריאנט הרגיל מבהיר את הרקע ולכן נעלם על הדר אדום. כאן הזכוכית לבנה-
   שקופה והטקסט לבן — אותו קצה, אותו בליק, כיוון אור זהה.
   ========================================================================== */
.glass-lens.gl-on-color {
  background: linear-gradient(180deg, rgba(255,255,255,.30) 0%, rgba(255,255,255,.17) 100%);
  -webkit-backdrop-filter: blur(22px) saturate(105%) brightness(1.12);
          backdrop-filter: blur(22px) saturate(105%) brightness(1.12);
  color: #fff;
  box-shadow:
    inset 0 0 0 .5px rgba(255,255,255,.42),
    inset 0 1px 0 rgba(255,255,255,.5),
    inset 0 -1px 0 rgba(0,0,0,.07),
    0 2px 9px rgba(0,0,0,.16);
  text-shadow: 0 1px 2px rgba(0,0,0,.28);
}
.glass-lens.gl-on-color::before {
  background: radial-gradient(60% 45% at 70% 0%, rgba(255,255,255,.32), transparent 70%);
}
html[dir="ltr"] .glass-lens.gl-on-color::before {
  background: radial-gradient(60% 45% at 30% 0%, rgba(255,255,255,.32), transparent 70%);
}
.glass-lens.gl-on-color:hover {
  background: linear-gradient(180deg, rgba(255,255,255,.40) 0%, rgba(255,255,255,.24) 100%);
  box-shadow:
    inset 0 0 0 .5px rgba(255,255,255,.5), inset 0 1px 0 rgba(255,255,255,.6),
    0 3px 12px rgba(0,0,0,.2);
}

/* ==========================================================================
   גל 2 · דאשבורד ומסך הקורייר
   ========================================================================== */
/* עטיפת המודאל — עמעום + טשטוש קל, כדי שהמסך שמאחור ייסוג ולא ייעלם */
.modal {
  background: rgba(20,24,31,.42);
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .modal { background: rgba(20,24,31,.6); }
}
@media (prefers-reduced-transparency: reduce) {
  .modal { -webkit-backdrop-filter: none; backdrop-filter: none; background: rgba(20,24,31,.62); }
}
html[data-theme="dark"] .modal { background: rgba(0,0,0,.55); }

/* פקדי הזום של המפה — צ'יפים זכוכיתיים.
   ⚠️ ‏Leaflet מגיע עם `color:#bbb` על ה-`−`, שנמדד 1.75:1. */
.leaflet-bar a, .leaflet-control-zoom a {
  background: rgba(255,255,255,.7) !important;
  -webkit-backdrop-filter: blur(18px) saturate(180%);
          backdrop-filter: blur(18px) saturate(180%);
  color: var(--ink) !important;
  border-color: rgba(255,255,255,.6) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.8), 0 2px 8px rgba(20,28,44,.14);
}
.leaflet-bar a:hover, .leaflet-control-zoom a:hover { background: rgba(255,255,255,.85) !important; }
html[data-theme="dark"] .leaflet-bar a, html[data-theme="dark"] .leaflet-control-zoom a {
  background: rgba(40,44,54,.8) !important; color: #e8ecf1 !important;
  border-color: rgba(255,255,255,.12) !important;
}


/* ==========================================================================
   גל 3 · מערכת האוויר · הים · עמוד התמחור
   ==========================================================================
   ⚠️⚠️ **כרטיסי התוכן נשארים בדיוק כפי שהיו** (הכרעת טל): ההצהרות הועברו
   לכאן **כלשונן** ולא הוחלפו ב-`.glass-surface` הגנרי, כי לכל משטח כאן יש
   עוצמת טשטוש שנבחרה לו (34 לכרטיס, 18 לתוצאה, 40 למודאל). המחלקה הגנרית
   נשארת לשימוש חדש; הקיים רק **עבר דירה**. הכלל שנשמר: אין `backdrop-filter`
   מחוץ לקובץ הזה.
   ========================================================================== */
.glass-body .card {
  background: rgba(255,255,255,.66);
  -webkit-backdrop-filter: blur(34px) saturate(180%);
          backdrop-filter: blur(34px) saturate(180%);
}
.glass-body .result {
  background: rgba(255,255,255,.78);
  -webkit-backdrop-filter: blur(18px) saturate(150%);
          backdrop-filter: blur(18px) saturate(150%);
}
.glass-body .prop-filters {
  background: rgba(255,255,255,.6);
  -webkit-backdrop-filter: blur(24px) saturate(180%);
          backdrop-filter: blur(24px) saturate(180%);
}
.glass-body .modal-box {
  background: rgba(250,250,252,.86);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
          backdrop-filter: blur(40px) saturate(180%);
}
.glass-body .agent-panel {
  background: rgba(250,250,252,.9);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
          backdrop-filter: blur(40px) saturate(180%);
}
/* תפריט היצירה (+) — פאנל צף */
.air-create-menu {
  background: rgba(255,255,255,.82);
  -webkit-backdrop-filter: blur(30px) saturate(180%);
          backdrop-filter: blur(30px) saturate(180%);
}
/* עמוד התמחור: כרטיס התוצאה הנבחר · מחליף מוצא↔יעד · השכבה הזכוכיתית */
.pr-page .pr-gl, .pr-page .pr-rc.sel, .pr-page .pr-swap {
  -webkit-backdrop-filter: blur(20px) saturate(170%);
          backdrop-filter: blur(20px) saturate(170%);
}
/* שדות הקלט בטפסי הזכוכית — משטח ולא פקד־זכוכית */
.glass-body .grid label, .glass-body .prop-panel label,
.glass-body .b-ocean, .glass-body .b-col, .glass-body .b-final {
  -webkit-backdrop-filter: blur(18px) saturate(150%);
          backdrop-filter: blur(18px) saturate(150%);
}

@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .glass-body .card { background: rgba(255,255,255,.95); }
  .glass-body .result { background: rgba(255,255,255,.96); }
  .glass-body .modal-box, .glass-body .agent-panel,
  .air-create-menu { background: rgba(250,250,252,.98); }
}
@media (prefers-reduced-transparency: reduce) {
  .glass-body .card, .glass-body .result, .glass-body .prop-filters,
  .glass-body .modal-box, .glass-body .agent-panel, .air-create-menu,
  .pr-page .pr-gl, .pr-page .pr-rc.sel, .pr-page .pr-swap,
  .glass-body .grid label, .glass-body .prop-panel label,
  .glass-body .b-ocean, .glass-body .b-col, .glass-body .b-final {
    -webkit-backdrop-filter: none; backdrop-filter: none;
  }
  .glass-body .card, .glass-body .result { background: var(--card); }
  .glass-body .modal-box, .glass-body .agent-panel, .air-create-menu { background: var(--surface, #fff); }
}


/* ==========================================================================
   גל 4 · ספריות · חלון המשלוח
   ⚠️ חלון המשלוח משותף ל-Air ול-Courier — כל שינוי כאן חל על שניהם.
   ========================================================================== */
/* הרצועה העליונה הדביקה של חלון המשלוח */
#cr-detail .sd-strip {
  -webkit-backdrop-filter: blur(20px) saturate(180%);
          backdrop-filter: blur(20px) saturate(180%);
}
/* תפריט ה-⋮ — ילד ישיר של body (בלוק מכיל), ולכן משטח צף */
#sd-menu {
  -webkit-backdrop-filter: blur(22px) saturate(180%);
          backdrop-filter: blur(22px) saturate(180%);
}
/* בורר המטבע בטופס העריכה */
#cr-detail .se-card-in .cur-native, .courier-body .cur-native {
  -webkit-backdrop-filter: blur(20px) saturate(180%);
          backdrop-filter: blur(20px) saturate(180%);
}
/* פקדי הזום של מפת המסלול בתוך החלון */
#cr-detail .leaflet-control-zoom a, #cr-detail .leaflet-bar {
  -webkit-backdrop-filter: blur(12px) saturate(170%);
          backdrop-filter: blur(12px) saturate(170%);
}
/* עטיפת החלון עצמו — טשטוש עדין יותר, המסך שמאחור עדיין נקרא */
#cr-detail.modal {
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  #cr-detail .sd-strip, #sd-menu { background: rgba(255,255,255,.97); }
}
@media (prefers-reduced-transparency: reduce) {
  #cr-detail .sd-strip, #sd-menu, #cr-detail .se-card-in .cur-native,
  #cr-detail .leaflet-control-zoom a, #cr-detail .leaflet-bar, #cr-detail.modal {
    -webkit-backdrop-filter: none; backdrop-filter: none;
  }
}

/* ==========================================================================
   .atb — סרגל ניווט תחתון (מערכת אוויר, מובייל בלבד)
   שתי יחידות נפרדות: גלולה זכוכיתית עם פריטי הניווט, וכפתור יצירה עגול
   שצף לצידה. הרכיב עצמו ב-`web/tabbar.js`, והוא מפרק את עצמו מה-DOM מעל 640px.
   ⚠️⚠️ **הכלל הבא אינו קישוט.** נמדד ב-11/08: בשינוי רוחב 768→390 הדגל
   `matchMedia().matches` התהפך אבל אירוע ה-`change` **לא נורה**, והסרגל נשאר
   ב-DOM ברוחב 768 — בלי `position` מהמדיה הוא נפל לזרימת העמוד ונראה כשורת
   כפתורים תועה בגובה 48px בתחתית התוכן. `display:none` כברירת מחדל הופך את
   זה מ"שבור" ל"בלתי נראה", ואינו מסתמך על שום מאזין.
   ========================================================================== */
.atb { display: none; }

@media (max-width: 640px) {
  /* הסרגל מחליף את שני הכפתורים הצפים. בדסקטופ שניהם נשארים כמו שהיו.
     ⚠️⚠️ ‏`!important` על הפעמון ולא מתוך עצלנות: ‏`renderNotifs` ב-notify.js
     כותב לו `style.display = "flex"` **בכל רענון התראות** (כל 20 שניות), וסגנון
     מוטבע גובר על כל כלל בגיליון. בלי זה הפעמון היה חוזר ומרחף מעל הסרגל
     20 שניות אחרי טעינת העמוד — תקלה שנראית רק אם ממתינים. */
  .air-body .air-addbar { display: none; }
  .air-body #notif-bell { display: none !important; }

  .atb {
    display: flex; position: fixed; inset-inline: 14px;
    bottom: calc(env(safe-area-inset-bottom) + 12px);
    z-index: 900; align-items: center; gap: 11px;
    transition: transform .3s var(--ease-out), opacity .24s var(--ease-out);
  }
  /* ⚠️⚠️ שתי רצועות תחתונות יחד = בלגן, ולכן הסרגל מחליק החוצה כשרצועת
     פעולה **תופסת בפועל את תחתית המסך** — ‏`.atb-out` נקבע ב-tabbar.js לפי
     מדידה, ולא לפי המסך שבו אנחנו נמצאים. ⚠️ הגרסה הראשונה נתלתה ב-
     `body.svc-courier` והעלימה את הניווט ממסך קבלת המחירים **כולו**.
     ⚠️ `courier-detail-open` נשאר תנאי CSS: חלון המשלוח נפתח מתוך iframe
     והמחלקה מגיעה ב-postMessage, לפני שיש למה למדוד. */
  .atb.atb-out, body.courier-detail-open .atb {
    transform: translateY(calc(100% + 24px)); opacity: 0; pointer-events: none;
  }

  /* --- הגלולה --- */
  /* ⚠️⚠️ **האטימות ירדה ל-.76 ב-11/08 (בקשת טל: שיורגש שזו זכוכית).** מה
     שמחזיק את הקריאות אינו האטימות אלא **הבועה**: היא אטומה (‏.94) ונושאת את
     כל הטקסט, בעוד שהגלולה נושאת רק אייקונים — ולאייקון מספיק 3:1 (‏WCAG
     1.4.11) ולא 4.5. נמדד על שלושה רקעים אמיתיים: רשימה לבנה, כרטיס צבעוני
     ומפה. ⚠️ **כל ירידה נוספת מחייבת מדידה מחדש של האפור** — ראה `.atb-ic`.
     ⚠️ ה-rim וה-inset מודגשים יותר מקודם: בשקיפות גבוהה הם מה שמצייר את
     קצה העדשה, ובלעדיהם הגלולה נראית כמו כתם ולא כמו חומר. */
  .atb-pill {
    flex: 1 1 auto; min-width: 0; height: 62px; border-radius: 999px;
    display: flex; align-items: center; padding: 0 6px;
    background: rgba(252,252,254,.76);
    -webkit-backdrop-filter: blur(24px) saturate(185%);
            backdrop-filter: blur(24px) saturate(185%);
    border: .5px solid rgba(255,255,255,.9);
    box-shadow: inset 0 1.5px 0 rgba(255,255,255,1),
                inset 0 0 0 1px rgba(255,255,255,.45),
                inset 0 -6px 12px -6px rgba(30,40,60,.06),
                0 0 0 .5px rgba(20,28,44,.08),
                0 2px 6px rgba(16,24,40,.08), 0 12px 32px -6px rgba(16,24,40,.22);
  }
  html[data-theme="dark"] .atb-pill {
    background: rgba(26,30,39,.74); border-color: rgba(255,255,255,.16);
    box-shadow: inset 0 1.5px 0 rgba(255,255,255,.18),
                inset 0 0 0 1px rgba(255,255,255,.06),
                0 2px 6px rgba(0,0,0,.5), 0 12px 32px -6px rgba(0,0,0,.6);
  }

  .atb-i {
    flex: 1 1 auto; min-width: 0; height: 52px; border: 0; background: none;
    padding: 0; font: inherit; cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    -webkit-tap-highlight-color: transparent;
  }
  /* ⚠️ הכיול האחיד — `--press`, ולא ערך משלנו. */
  .atb-i:active .atb-bub {
    transform: scale(var(--press)); transition-duration: var(--press-t);
  }

  /* ⚠️⚠️ הבועה היא **ילדה של הפריט** ולא אלמנט צף עם מיקום מחושב. רוחב הפריט
     הפעיל משתנה עם פתיחת הלייבל, ולכן כל מדידה של בועה מרחפת היא מדידה בתוך
     אנימציה — בדיוק המקור לבאג שבו בועת ה-segmented ברחה מהמסלול. כאן היא לא
     יכולה לצאת מהגלולה בשום מצב. */
  .atb-bub {
    display: inline-flex; align-items: center; gap: 6px; max-width: 100%;
    height: 46px; padding: 0 12px; border-radius: 999px;
    background: transparent; box-shadow: none;
    transition: background .26s var(--ease-out), box-shadow .26s var(--ease-out),
                padding .3s var(--ease-pop), transform .14s var(--ease-out);
  }
  /* ריפוד צר ללא-פעיל — משאיר לבועה מקום לגדול בלי ללחוץ את הלייבל */
  .atb-i:not(.on) .atb-bub { padding: 0 10px; }
  /* ⚠️⚠️ **הבועה אטומה מהגלולה בכוונה.** זה הפריט שקוראים, וזה גם מה שיוצר
     את האפקט: משטח מוצק שצף מעל שכבה שקופה. אם היא תרד לשקיפות הגלולה,
     גם הניגודיות תיפול וגם המראה ייעלם. */
  .atb-i.on .atb-bub {
    background: rgba(255,255,255,.94); padding: 0 14px;
    box-shadow: inset 0 1px 1px rgba(255,255,255,1), 0 1px 2px rgba(20,28,44,.10),
                0 6px 14px -6px rgba(20,28,44,.30);
  }
  html[data-theme="dark"] .atb-i.on .atb-bub {
    background: rgba(255,255,255,.20);
    box-shadow: inset 0 1px 1px rgba(255,255,255,.3), 0 6px 14px -6px rgba(0,0,0,.6);
  }

  .atb-ic { position: relative; display: inline-flex; flex: 0 0 auto; }
  .atb-ic .ic, .atb-ic svg { width: 22px; height: 22px; display: block; }
  /* ⚠️⚠️ האפור הזה כויל **אחרי** שנקבע גוון הגלולה, לא לפניו. הגלולה שקופה
     למחצה ויושבת גם מעל המפה הכהה, ולכן הרצפה שלה במקרה הגרוע היא 226 ולא 255:
     ‏`#6b6b6b` נמדד שם 4.23 ו-`#636366` (האפור של אפל) 4.65 — על הסף.
     ‏`#5c5c60` נותן 5.17. **כל שינוי באטימות הגלולה מחייב מדידה מחדש כאן.** */
  .atb-i .atb-ic { color: #5c5c60; transition: color .22s var(--ease-out); }
  html[data-theme="dark"] .atb-i .atb-ic { color: #a8b0bd; }
  .atb-i.on .atb-ic { color: var(--brand-link); }
  /* ⚠️ בדארק הבועה שקופה, ולכן `#ff6b6b` נפל ל-3.20 מעל תוכן בהיר. */
  html[data-theme="dark"] .atb-i.on .atb-ic { color: #ffd9d9; }

  /* ⚠️ הלייבל נפתח ב-`max-width` ולא ב-transform — אין מה שיברח.
     ‏`ellipsis` הוא רשת ביטחון: לייבל ארוך מדי ייחתך **בגלוי** ולא בשקט. */
  .atb-lbl {
    max-width: 0; opacity: 0; overflow: hidden; white-space: nowrap;
    text-overflow: ellipsis; font-size: 13px; font-weight: 700;
    color: var(--brand-ink);
    transition: max-width .3s var(--ease-pop), opacity .2s var(--ease-out);
  }
  .atb-i.on .atb-lbl { max-width: 108px; opacity: 1; }
  html[data-theme="dark"] .atb-i.on .atb-lbl { color: #ffd9d9; }

  /* ⚠️ ‏`direction: ltr` — בלעדיו "9+" נקרא הפוך ("+9") בעמוד RTL. נמדד.
     ⚠️ ‏`[hidden]` מפסיד לכל display מפורש; כאן אין כזה, והכלל הבא מקבע זאת. */
  .atb-bdg {
    position: absolute; top: -8px; inset-inline-end: -10px;
    min-width: 16px; height: 16px; border-radius: 999px;
    background: var(--brand); color: #fff; direction: ltr;
    font-size: 10px; font-weight: 800; line-height: 16px; text-align: center;
    padding: 0 4px; box-sizing: border-box;
    box-shadow: 0 0 0 2px rgba(255,255,255,.95);
    font-variant-numeric: tabular-nums;
  }
  .atb-bdg[hidden] { display: none; }
  html[data-theme="dark"] .atb-bdg { box-shadow: 0 0 0 2px rgba(28,32,41,.95); }

  /* --- כפתור היצירה, נפרד מהגלולה --- */
  /* ⚠️ אלמוגי בהיר ולא אדום ה-TSM (הכרעת טל 11/08). ה-+ הלבן נמדד 3.32 בקצה
     העליון של הגרדיאנט — עובר את 1.4.11 (3.0) לאייקון, ובקושי. אין להכהות
     את הלבן ואין להבהיר עוד את הרקע. */
  .atb-add {
    flex: 0 0 auto; width: 56px; height: 56px; border-radius: 50%;
    border: 0; padding: 0; cursor: pointer; color: #fff;
    display: inline-flex; align-items: center; justify-content: center;
    -webkit-tap-highlight-color: transparent;
    background: linear-gradient(180deg, #f4574d 0%, #e8362b 100%);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.42),
                0 6px 16px rgba(232,54,43,.44), 0 2px 5px rgba(232,54,43,.30);
    transition: transform .2s var(--ease-out);
  }
  .atb-add .ic, .atb-add svg { width: 26px; height: 26px; stroke-width: 2.4; }
  .atb-add:active { transform: scale(var(--press)); transition-duration: var(--press-t); }
  /* התפריט פתוח → ה-+ הופך ל-×. ‏`anchoredMenu` מוסיף `.on` לטריגר. */
  .atb-add.on { transform: rotate(45deg); }
  /* ⚠️ בדארק מוד ההילה האדומה קוראת כמו ניאון — אותה עוצמת צל בולטת הרבה
     יותר על רקע כהה. פיזור קצר יותר ואטימות נמוכה; הכפתור עדיין מרחף.
     אותו עיקרון שכבר תועד ב-`.pbtn`: "צל תמיד למטה, קרוב ורך". */
  html[data-theme="dark"] .atb-add {
    box-shadow: inset 0 1px 0 rgba(255,255,255,.3),
                0 4px 10px rgba(232,54,43,.22), 0 2px 4px rgba(0,0,0,.45);
  }

  /* התוכן מפנה מקום — הסרגל גבוה מהכפתורים שהוא מחליף */
  .air-body main { padding-bottom: calc(104px + env(safe-area-inset-bottom)); }

  /* ==== הדאשבורד: מסך סטטי, גם בעמוד המארח ====
     ⚠️⚠️ **הדאשבורד הוא שני מסמכים, ולכל אחד גלילה משלו.** נעילת הגלילה
     בתוך ה-iframe (‏`styles.css`, ‏`100dvh` על `main.courier-main`) טיפלה
     בחצי אחד בלבד: העמוד המארח נשאר מסמך רגיל בגובה 954 מול מסך 844 —
     ‏**110px של גלילה** שנמדדו בפועל, והם מה שטל הרגיש. הגובה המלא של
     ‏`.courier-fill` קיים רק מ-1100px ומעלה (דסקטופ), ולכן לא כיסה כאן כלום.
     ⚠️ `air-dash` ולא `courier-fill`: האחרונה נדלקת גם בהזמנות ובארכיון,
     ושם הגלילה **נחוצה**.
     ⚠️ **בלי `overflow: hidden`** — אותו שיקול כמו בתוך ה-iframe: הגובה מדויק
     ולכן אין מה לגלול, ואם בכל זאת יחרוג משהו עדיף שיהיה נגיש מאשר שייעלם. */
  .air-body.air-dash { height: 100dvh; display: flex; flex-direction: column; }
  /* ⚠️ הריפוד התחתון מיותר כאן: ה-iframe נמתח עד תחתית המסך, והסרגל הצף מרחף
     מעליו. המרווח שמונע חפיפה נמצא **בתוכו** (`padding-bottom: 96px`). */
  .air-body.air-dash > main {
    flex: 1 1 auto; min-height: 0; display: flex;
    padding-bottom: 0; margin-block: 8px;
  }
  .air-body.air-dash > main > #air-courier.panel.active {
    flex: 1 1 auto; min-height: 0; display: flex; padding: 0;
  }
  /* ⚠️ `flex` ולא `height: 100%` — בפריסת עמודה ב-WebKit הגובה הוא הציר
     הראשי, וילד שמבקש 100% מקבל את מלוא הגובה **בנוסף** לאחיו. */
  .air-body.air-dash .courier-frame {
    flex: 1 1 auto; min-height: 0; height: auto; max-height: none;
  }
  /* ⚠️⚠️ **אנימציית הכניסה מזיזה את הפאנל 10px למטה, וזה 10px של גלילה.**
     ‏`glPanelIn` (‏styles.css) פותחת ב-`translateY(10px)`, והפאנל כאן הוא
     **בדיוק** בגובה המסך — כלומר בזמן הכניסה הוא חורג מהתחתית והמסך "רועד"
     ונגלל קמעה. נמדד: 846 מול 844, ואחרי סיום האנימציה 0.
     כאן נשארת רק ההופעה (opacity) — התזוזה מיותרת במסך שאינו נגלל. */
  .air-body.air-dash > main > #air-courier.panel.active { animation-name: glPanelFade; }
  /* תיבת ההתראות נפתחת מעל הסרגל ולא מעליו-ומאחוריו */
  .air-body #notif-box { bottom: calc(88px + env(safe-area-inset-bottom)); }

  /* ⚠️⚠️ **גם לעמוד הים יש סרגל פעולות תחתון, והפעמון נחת עליו.**
     נמדד ב-375×812: הפעמון 734–790 והסרגל 741–811 — חפיפה של 49px
     שכיסתה חצי מכפתור "בקשה חדשה". בדסקטופ אין חפיפה (המסגרת צרה
     מהמסך), ולכן זה כלל של המובייל בלבד.
     ⚠️ הגובה נגזר מ-`--bar-h` ולא מספר קשוח — הסרגל מגדיר אותו, ומספר
     קבוע כאן היה מתיישן ברגע שהוא משתנה. */
  .sea-body #notif-bell { bottom: calc(var(--bar-h, 4.25rem) + 22px + env(safe-area-inset-bottom)); }
  .sea-body #notif-box { bottom: calc(var(--bar-h, 4.25rem) + 88px + env(safe-area-inset-bottom)); }
  /* ⚠️ והגליל מקבל מקום לפעמון, אחרת השורה האחרונה נשארת מתחתיו
     ואי אפשר לגלול אותה החוצה. באוויר הבעיה לא קיימת כי שם הפעמון
     **מוסתר** במובייל ויושב בסרגל התחתון; לים אין סרגל כזה. */
  .sea-body .sq-scroll { padding-bottom: calc(var(--bar-h) + 78px + env(safe-area-inset-bottom) + var(--sp-5)); }

  @media (prefers-reduced-motion: reduce) {
    .atb, .atb-bub, .atb-lbl, .atb-add { transition: none; }
    .atb-add.on { transform: none; }
  }
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .atb-pill { background: rgba(250,250,252,.98); }
  html[data-theme="dark"] .atb-pill { background: rgba(26,30,38,.98); }
}
@media (prefers-reduced-transparency: reduce) {
  .atb-pill { -webkit-backdrop-filter: none; backdrop-filter: none;
    background: rgba(250,250,252,.99); }
  html[data-theme="dark"] .atb-pill { background: rgba(26,30,38,.99); }
}


/* ==========================================================================
   תיבת ההתראות — משטח זכוכית צף (הצבעים והמבנה ב-styles.css, בסוף הקובץ)
   ⚠️ טשטוש גבוה מהסרגל: היא גדולה יותר ויושבת מעל תוכן צפוף, ובלי טשטוש חזק
   הטקסט שמאחוריה נקרא דרך השורות.
   ========================================================================== */
/* ⚠️⚠️ **הטשטוש של הפאנל הוא דסקטופ בלבד מ-12/08.** במובייל כל שורה היא
   משטח זכוכית בפני עצמו, ופאנל מטושטש מתחתיהן היה טשטוש של פלט שכבר טושטש —
   יקר, ונראה עכור במקום עמוק. */
@media (min-width: 641px) {
  .notif-box {
    -webkit-backdrop-filter: blur(34px) saturate(180%);
            backdrop-filter: blur(34px) saturate(180%);
  }
}
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .notif-box { background: rgba(252,252,254,.99); }
  html[data-theme="dark"] .notif-box { background: rgba(28,32,41,.99); }
}
@media (prefers-reduced-transparency: reduce) {
  .notif-box { -webkit-backdrop-filter: none; backdrop-filter: none; }
}

/* ‏`glPanelIn` בלי התזוזה — למסך שגובהו בדיוק גובה החלון (ראה `.air-dash`) */
@keyframes glPanelFade { from { opacity: 0; } to { opacity: 1; } }

/* ==========================================================================
   שורות ההתראות במובייל — כל שורה משטח זכוכית מרחף בפני עצמו
   ⚠️ הפאנל עצמו **אינו** משטח יותר (ראה `#notif-box` ב-styles.css): זכוכית
   בתוך זכוכית מטשטשת פלט שכבר מטושטש — יקר, ונראה עכור במקום עמוק.
   ========================================================================== */
@media (max-width: 640px) {
  /* ⚠️⚠️ **הטשטוש עבר ל-scrim, והשורות ויתרו עליו.** ברגע שיש שכבת עמעום
     מטושטשת מאחורי הפאנל, טשטוש נוסף בכל שורה מטשטש פלט שכבר טושטש — עלות
     בלי תמורה, ומראה עכור. השורות נשארות שקופות למחצה **מעל** ה-scrim. */
  .notif-scrim {
    -webkit-backdrop-filter: blur(14px) saturate(120%);
            backdrop-filter: blur(14px) saturate(120%);
  }
  /* ⚠️⚠️ **‏.86 ולא .78, וזה נמדד ולא נבחר.** טל ביקש טווח .72-.80, אבל
     הטקסט המשני האפור נמדד שם **4.13** מעל המפה הכהה — מתחת ל-AA. הכלל
     שהוא עצמו קבע: כשהקריאות נשברת מעלים את אטימות השורה ולא מכהים טקסט.
     ‏.86 נותן 4.55. תחושת הזכוכית מגיעה מה-blur וה-saturate, לא מהאטימות. */
  .notif-item, .notif-head, .notif-empty {
    background: rgba(255,255,255,.86);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.9),
                0 0 0 .5px rgba(20,28,44,.06),
                0 2px 6px rgba(16,24,40,.07), 0 10px 24px -8px rgba(16,24,40,.18);
  }
  html[data-theme="dark"] .notif-item,
  html[data-theme="dark"] .notif-head,
  html[data-theme="dark"] .notif-empty {
    background: rgba(28,32,41,.86);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.12),
                0 2px 6px rgba(0,0,0,.4), 0 10px 24px -8px rgba(0,0,0,.55);
  }
  @supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
    .notif-item, .notif-head, .notif-empty {
      background: rgba(252,252,254,.99);
    }
    html[data-theme="dark"] .notif-item,
    html[data-theme="dark"] .notif-head,
    html[data-theme="dark"] .notif-empty { background: rgba(28,32,41,.99); }
  }
  @media (prefers-reduced-transparency: reduce) {
    .notif-item, .notif-head, .notif-empty {
      background: rgba(252,252,254,.99);
    }
    /* בלי טשטוש — העמעום לבדו חייב להסתיר את התוכן, ולכן הוא כהה יותר */
    .notif-scrim { -webkit-backdrop-filter: none; backdrop-filter: none;
      background: rgba(20,24,33,.74); }
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   ספריית הסוכנים — מפת הכיסוי (12/08/2026)
   ⚠️⚠️ הטשטוש של הצ'יפים, הפינים ופקדי הזום חי **כאן ורק כאן**. הכלל בפרויקט:
   `grep -c backdrop-filter web/styles.css` על **הצהרות** חייב להחזיר 0, והוא
   נעול בשתי בדיקות (‏verify_air_tabbar [5j] ו-verify_customer_stage2).
   הצבעים, הפריסה והמידות נשארים ב-styles.css בתוך שער הדסקטופ —
   כאן רק החומר. ⚠️ אותו שער בדיוק, אחרת הטשטוש מוחל גם במובייל.
   ══════════════════════════════════════════════════════════════════════════ */
@media (min-width: 1100px) and (hover: hover) and (pointer: fine) {
  :is(.air-body, .sea-body).agents-split .agl-chip-reg {
    -webkit-backdrop-filter: blur(18px) saturate(180%);
            backdrop-filter: blur(18px) saturate(180%);
  }
  :is(.air-body, .sea-body).agents-split .agl-lbl {
    -webkit-backdrop-filter: blur(20px) saturate(190%);
            backdrop-filter: blur(20px) saturate(190%);
  }
  :is(.air-body, .sea-body).agents-split .agl-dot {
    -webkit-backdrop-filter: blur(16px) saturate(180%);
            backdrop-filter: blur(16px) saturate(180%);
  }
  :is(.air-body, .sea-body).agents-split .agl-tip.leaflet-tooltip {
    -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  }
  :is(.air-body, .sea-body).agents-split .agl-map .leaflet-control-zoom a {
    -webkit-backdrop-filter: blur(20px) saturate(180%);
            backdrop-filter: blur(20px) saturate(180%);
  }
  /* בלי תמיכה בטשטוש / בשקיפות מופחתת — המשטח חייב להיות אטים כדי שהטקסט
     עליו יישאר קריא מעל מפה צבעונית. */
  @supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
    :is(.air-body, .sea-body).agents-split .agl-chip-reg,
    :is(.air-body, .sea-body).agents-split .agl-lbl,
    :is(.air-body, .sea-body).agents-split .agl-map .leaflet-control-zoom a {
      background: rgba(252,252,254,.98);
    }
    :is(.air-body, .sea-body).agents-split .agl-dot { background: rgba(252,252,254,.99); }
  }
  @media (prefers-reduced-transparency: reduce) {
    :is(.air-body, .sea-body).agents-split .agl-chip-reg,
    :is(.air-body, .sea-body).agents-split .agl-lbl,
    :is(.air-body, .sea-body).agents-split .agl-map .leaflet-control-zoom a {
      -webkit-backdrop-filter: none; backdrop-filter: none;
      background: rgba(252,252,254,.98);
    }
    :is(.air-body, .sea-body).agents-split .agl-dot {
      -webkit-backdrop-filter: none; backdrop-filter: none;
      background: rgba(252,252,254,.99);
    }
  }
  @supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
    html[data-theme="dark"] :is(.air-body, .sea-body).agents-split .agl-chip-reg,
    html[data-theme="dark"] :is(.air-body, .sea-body).agents-split .agl-lbl,
    html[data-theme="dark"] :is(.air-body, .sea-body).agents-split .agl-map .leaflet-control-zoom a,
    html[data-theme="dark"] :is(.air-body, .sea-body).agents-split .agl-dot {
      background: rgba(28,32,41,.99);
    }
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   «זכוכית נוזלית» — `.lglass` (הכרעת טל 19/08, אושר מוקאפ סבב 5)
   ⚠️⚠️ **מה שיוצר את המראה אינו הטשטוש אלא שלוש שכבות:**
   ① בסיס שקוף-למחצה בגרדיאנט אנכי (האור נופל מלמעלה),
   ② **טבעת גרדיאנט** בעובי 1.7px שנחתכת במסכה — זו ה"שפה העבה" של העדשה,
      ובלעדיה הפקד נראה כמסגרת שטוחה ולא כזכוכית,
   ③ **ברק ספקולרי** בחצי העליון בלבד.
   ועוד: צל פנימי כהה בתחתית = עובי החומר, וצל חיצוני = הרמה מהמשטח.
   ⚠️⚠️ **השכבות ב-`z-index:-1` תחת `isolation:isolate`** — מעל הרקע ומתחת
   לתוכן. הגרסה ההפוכה (שכבות מעל + `> * {position:relative}`) **מקרקעת כל
   ילד `absolute`** (למשל `.seg-bubble`) ומלבינה טקסט שיושב בצומת טקסט חשוף.
   ⚠️ WebKit: כל שכבה מלאת-מסגרת חייבת `border-radius: inherit`.
   ⚠️ הלחיצה על `--press` המשותף בלבד. ⚠️ **אין למרכז פקד ב-`transform`** —
   `:active { transform: scale() }` דורס אותו והפקד קופץ חצי-גובה.
   ⚠️ תג/באדג׳ שיושב על החומר הזה **חייב רקע אטום משלו**: רקע שקוף יורש את
   הגוון שמתחת, ועל שורה בגוון המותג הוא נמדד 3.09:1. */
.lglass { position: relative; isolation: isolate; border: 0; color: var(--ink);
  background: linear-gradient(180deg, rgba(255,255,255,.66), rgba(255,255,255,.34));
  -webkit-backdrop-filter: blur(18px) saturate(180%);
  backdrop-filter: blur(18px) saturate(180%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.95),
    inset 0 -1px 0 rgba(255,255,255,.5),
    inset 0 9px 18px -12px rgba(255,255,255,.95),
    inset 0 -11px 20px -12px rgba(20,28,44,.16),
    0 1px 1px rgba(20,28,44,.05),
    0 10px 22px -10px rgba(20,28,44,.22);
  transition: background .18s ease, box-shadow .18s ease, transform var(--press-t) ease; }
.lglass::before { content: ""; position: absolute; inset: 0; border-radius: inherit;
  padding: 1.7px; pointer-events: none; z-index: -1;
  background: linear-gradient(158deg, #fff, rgba(255,255,255,.42) 30%,
              rgba(255,255,255,.1) 50%, rgba(255,255,255,.62) 72%, #fff);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
          mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude; }
.lglass::after { content: ""; position: absolute; inset: 1px 1px 48%; border-radius: inherit;
  pointer-events: none; z-index: -1;
  background: linear-gradient(180deg, rgba(255,255,255,.6), rgba(255,255,255,0)); }
.lglass:hover { background: linear-gradient(180deg, rgba(255,255,255,.78), rgba(255,255,255,.44));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,1), inset 0 -1px 0 rgba(255,255,255,.6),
    inset 0 9px 18px -12px rgba(255,255,255,1),
    inset 0 -11px 20px -12px rgba(20,28,44,.14),
    0 2px 3px rgba(20,28,44,.06), 0 16px 30px -12px rgba(20,28,44,.26); }
button.lglass:active { transform: scale(var(--press)); transition-duration: var(--press-t); }

/* גרסת המותג — לגלולת "לחיוב" ולשורת שירות שנבחרה */
.lglass.lg-brand { background:
    linear-gradient(180deg, color-mix(in srgb, var(--brand) 20%, rgba(255,255,255,.82)),
                            color-mix(in srgb, var(--brand) 13%, rgba(255,255,255,.5))); }
.lglass.lg-brand::before { background: linear-gradient(150deg, rgba(255,255,255,.98),
    color-mix(in srgb, var(--brand) 42%, transparent) 42%,
    rgba(255,255,255,.22) 60%, color-mix(in srgb, var(--brand) 60%, transparent)); }
.lglass.lg-brand:hover { background:
    linear-gradient(180deg, color-mix(in srgb, var(--brand) 24%, rgba(255,255,255,.86)),
                            color-mix(in srgb, var(--brand) 16%, rgba(255,255,255,.56))); }

html[data-theme="dark"] .lglass {
  background: linear-gradient(180deg, rgba(255,255,255,.15), rgba(255,255,255,.055));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.5), inset 0 -1px 0 rgba(255,255,255,.12),
    inset 0 10px 20px -13px rgba(255,255,255,.3),
    inset 0 -12px 22px -14px rgba(0,0,0,.6),
    0 2px 6px rgba(0,0,0,.42), 0 16px 30px -12px rgba(0,0,0,.6); }
html[data-theme="dark"] .lglass::before {
  background: linear-gradient(150deg, rgba(255,255,255,.62), rgba(255,255,255,.12) 38%,
              rgba(255,255,255,.03) 58%, rgba(255,255,255,.42)); }
html[data-theme="dark"] .lglass::after {
  background: linear-gradient(180deg, rgba(255,255,255,.2), rgba(255,255,255,0)); }
html[data-theme="dark"] .lglass:hover {
  background: linear-gradient(180deg, rgba(255,255,255,.2), rgba(255,255,255,.08)); }
html[data-theme="dark"] .lglass.lg-brand {
  background: linear-gradient(180deg, color-mix(in srgb, var(--brand) 42%, rgba(255,255,255,.1)),
                                      color-mix(in srgb, var(--brand) 26%, rgba(255,255,255,.04))); }
html[data-theme="dark"] .lglass.lg-brand::before {
  background: linear-gradient(150deg, rgba(255,255,255,.7),
      color-mix(in srgb, var(--brand) 60%, transparent) 44%,
      rgba(255,255,255,.14) 62%, color-mix(in srgb, var(--brand) 70%, transparent)); }

/* ⚠️ מי שביקש פחות שקיפות מקבל משטח אטום — אחרת הבקשה שלו מבוטלת. */
@media (prefers-reduced-transparency: reduce) {
  .lglass { -webkit-backdrop-filter: none; backdrop-filter: none; background: var(--card);
    box-shadow: inset 0 0 0 1px var(--line), var(--shadow-sm); }
  .lglass::after { display: none; }
  .lglass.lg-brand { background: var(--brand-light); }
}
@media (prefers-reduced-motion: reduce) { button.lglass:active { transform: none; } }
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
  .lglass { background: rgba(255,255,255,.94); }
  html[data-theme="dark"] .lglass { background: rgba(40,44,54,.97); }
}

/* ==========================================================================
   .gl-switch — מתג בשפת הזכוכית (23/08/2026)
   ==========================================================================
   ⚠️⚠️ **המתכון כאן ורק כאן** — כל `backdrop-filter` במערכת מוגדר בקובץ
   הזה, ונעול בבדיקה (מספר ההצהרות ב-`styles.css` חייב להיות 0).
   ⚠️ המתכון זהה ל-`.glass-lens`: ‏rgba + blur/saturate + rim (inset
   highlight) + צל קרוב + בליק (`::before` radial, ב-RTL ‎at 70% 0%‎).

   ⚠️⚠️ **הכרעת טל (23/08): אפשרות ב' — בלי טבעת דיו, כמו הרפרנס של אפל.**
   המשמעות נמדדה ומוצהרת: מחוון הפקד במצב **כבוי בבהיר** הוא **1.58:1**
   ולא 3:1 (‏WCAG 1.4.11). ‏**זו התנהגות המתג של אפל עצמו** — הוא נשען על
   הצל של הידית, וצל אינו נמדד בנוסחה.
   ⚠️ **החוב צומצם לתא אחד:** דלוק/בהיר **3.47 ✓** · כהה בשני המצבים
   **17.93 ✓** · **רק כבוי/בהיר נשאר 1.58**, וזה המצב שבו אין מה לזהות
   כ"דלוק". **חוב מוצהר, לא הפתעה.** גרסה עם טבעת (3.1) קיימת בהיסטוריה
   של המוקאפ אם ההכרעה תתהפך.

   ⚠️ **הידית גבוהה מהמסלול** (‏30 מול 26) — חרוז שיושב **על** הזכוכית,
   וזה מה שמייצר את המראה. ולכן למסלול **אין** `overflow: hidden` על ציר
   ה-Y; הבלוב נחתך ברדיוס בלבד.
   ⚠️ **`border-radius: inherit` על כל שכבה** — WebKit אינו מחיל חיתוך
   מעוגל על צאצא שקודם לקומפוזיטינג (`filter: blur` כאן), ובלי זה נוצרות
   פינות מרובעות על אייפון (מלכודת מתועדת). */
.gl-switch { flex: none; position: relative; width: 52px; height: 30px;
  display: flex; align-items: center; }
/* ⚠️ הקלט גדול מהפקד: יעד המגע הוא 44px גם כשהמתג 30px. */
.gl-switch input { position: absolute; inset: -7px; width: calc(100% + 14px);
  height: calc(100% + 14px); margin: 0; opacity: 0; cursor: pointer; z-index: 2; }
.gl-sw-t {
  position: absolute; inset-inline: 0; top: 2px; height: 26px; border-radius: 980px;
  pointer-events: none; overflow: hidden;
  background: rgba(255,255,255,.58);
  -webkit-backdrop-filter: blur(22px) saturate(185%);
  backdrop-filter: blur(22px) saturate(185%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.55),
              inset 0 1.5px 1px rgba(255,255,255,.95),
              inset 0 -1px 1px rgba(255,255,255,.35),
              inset 0 -6px 12px -6px rgba(30,40,60,.08),
              0 1px 3px rgba(20,28,44,.10);
  transition: box-shadow .22s var(--ease-out);
}
.gl-sw-t::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit;
  pointer-events: none; opacity: .9;
  background: radial-gradient(60% 45% at 70% 0%, rgba(255,255,255,.75), transparent 70%);
}
/* ⚠️⚠️ **הבלוב הנוזלי** — זה מה שהופך "מסלול צבוע" ל-Liquid Glass: כתם רך
   שזורם מהקצה, מטושטש וגדול מהמסלול, ולא מילוי אטום.
   ⚠️ 66% ולא 52%: ב-52% נמדד **2.64** ולא עבר 3:1; ב-66% — **3.47**. */
.gl-sw-t::after {
  content: ""; position: absolute; top: -40%; height: 180%;
  inset-inline-start: -18%; width: 74%; border-radius: 980px;
  background: radial-gradient(66% 62% at 42% 50%,
    color-mix(in srgb, var(--brand) 66%, transparent),
    color-mix(in srgb, var(--brand) 24%, transparent) 64%, transparent 82%);
  filter: blur(6px) saturate(120%);
  opacity: 0; transform: translateX(-26%);
  transition: opacity .24s var(--ease-out), transform .28s var(--ease-out);
}
.gl-sw-d {
  position: absolute; top: 0; inset-inline-start: 0;
  width: 30px; height: 30px; border-radius: 980px; pointer-events: none;
  background: rgba(255,255,255,.72);
  -webkit-backdrop-filter: blur(14px) saturate(200%);
  backdrop-filter: blur(14px) saturate(200%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.72),
              inset 0 2px 1.5px rgba(255,255,255,1),
              inset 0 -2px 3px rgba(30,40,60,.10),
              0 1px 2px rgba(20,28,44,.18),
              0 4px 10px -2px rgba(20,28,44,.22);
  transition: inset-inline-start .26s var(--ease-out), box-shadow .22s var(--ease-out);
}
.gl-switch input:checked ~ .gl-sw-t::after { opacity: 1; transform: translateX(0); }
.gl-switch input:checked ~ .gl-sw-d { inset-inline-start: 22px; }
/* ⚠️ `outline` לפוקוס ולא `box-shadow` — האחרון דורס את ה-rim. */
.gl-switch input:focus-visible ~ .gl-sw-t {
  outline: 2px solid var(--ring, var(--brand-dark)); outline-offset: 3px; }

/* ⚠️⚠️ בכהה — **המספרים של הזכוכית הכהה**, לא של הבהיר: זכוכית בהירה על
   רקע כהה נראית ככתם לבן. ‏.13 מחזיר את החומר (‏.085 יצא אפור בוצי). */
html[data-theme="dark"] .gl-sw-t {
  background: rgba(255,255,255,.13);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.42),
              inset 0 0 0 2px rgba(255,255,255,.12),
              inset 0 -1px 1px rgba(255,255,255,.08),
              inset 0 -6px 12px -6px rgba(0,0,0,.4),
              0 1px 3px rgba(0,0,0,.34);
}
html[data-theme="dark"] .gl-sw-d {
  background: rgba(255,255,255,.22);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.5),
              inset 0 0 0 2px rgba(255,255,255,.22),
              inset 0 2px 1.5px rgba(255,255,255,.42),
              inset 0 -2px 3px rgba(0,0,0,.34),
              0 1px 2px rgba(0,0,0,.4), 0 4px 10px -2px rgba(0,0,0,.5);
}
/* ⚠️⚠️ **`--brand-dark` על רקע כהה נכשל שלוש פעמים בפרויקט** (סרגל הסיכום
   ב-I3, אזור החיובים, והמתג כאן) — 1.48–1.59. ‏`--brand` לבדו ~2.9, גם
   נכשל. **הכלל: הגוון הזה אינו רקע בכהה.** מעורבב עם צבע הטקסט. */
html[data-theme="dark"] .gl-sw-t::after {
  background: radial-gradient(66% 62% at 42% 50%,
    color-mix(in srgb, var(--brand) 62%, var(--ink)),
    color-mix(in srgb, var(--brand) 26%, transparent) 64%, transparent 82%);
}

/* ⚠️ נפילות אחורה חובה */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .gl-sw-t { background: rgba(255,255,255,.86); }
  .gl-sw-d { background: #fff; }
  html[data-theme="dark"] .gl-sw-t { background: rgba(255,255,255,.16); }
  html[data-theme="dark"] .gl-sw-d { background: rgba(255,255,255,.28); }
}
/* ⚠️⚠️ בשקיפות מופחתת המתג **אטום ועם מסגרת** — שם אין זכוכית לשאת את
   הזיהוי, ולכן דווקא כאן הטבעת חוזרת ומעבירה את ה-3:1. */
@media (prefers-reduced-transparency: reduce) {
  .gl-sw-t { background: var(--card); backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ink) 50%, transparent); }
  .gl-sw-d { background: var(--card); backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ink) 50%, transparent),
                0 1px 2px rgba(20,28,44,.2); }
  .gl-sw-t::after { filter: none; }
}
@media (prefers-reduced-motion: reduce) {
  .gl-sw-t, .gl-sw-d, .gl-sw-t::after { transition: none; }
}


/* ==========================================================================
   מודול הים — הרשימה המקובצת, הקפיצים וסולם הטיפוגרפיה  (‏`.sq-*`)
   ==========================================================================
   ⚠️⚠️ **הועבר לכאן מ-`docs/mockups/sea-shell.css` ב-M3, וזה לא סידור.**
   המוקאפ הצהיר במפורש שהוא "תחנת ביניים ולא יעד", **כדי שלא ייווצרו שלושה
   עותקים שנסחפים זה מזה** — הבעיה שהפרויקט הזה נלחם בה שוב ושוב. מרגע
   שהחומר כאן, המוקאפ צורך אותו ואינו מגדיר אותו.

   ⚠️ נטען **אחרי** `styles.css` בכל העמודים, ולכן הוא צורך את הטוקנים שלו
   (`--card`, `--ink`, `--brand-ink`, `--good`, `--warn`) ואינו מגדיר אותם.
   ⚠️⚠️ **`--press` נצרך ואינו מוגדר מחדש** — הוא מכויל למעלה בקובץ הזה,
   ופקד חדש **אינו** מגדיר `:active { transform }` משלו. שני משובים על
   אותה לחיצה זו תקלה מתועדת.
   ⚠️ **אפס `backdrop-filter` חדש כאן** — הכרום של המסך בנוי על
   `.glass-strong` הקיים, ולא על חומר חדש.
   ========================================================================== */

/* ---------- 1 · קפיצים (§4) ----------------------------------------------
   ⚠️⚠️ **חושבו, לא הומצאו.** אפל מחליפה את שלישיית הפיזיקה בשני פרמטרים:
   ‏`damping ratio` (התנודה) ו-`response` (מהירות ההגעה, בשניות).
   ‏`x(t) = 1 − e^(−ζωt)(cos ω_d t + (ζω/ω_d) sin ω_d t)`, ‏`ω = 2π/T`.
   ‏`--sp-*-t` הוא משך ה-CSS (1.45×T) — **לא ה-response**, שכן לקפיץ אין
   משך: זמן ההתיישבות נגזר מהפרמטרים.
   ⚠️ ברירת המחדל היא **ζ=1.0, בלי חריגה**. תנודה נשמרת **רק** לתנועה
   שקדם לה מומנטום — חריגה על תפריט שרק נדלק מרגישה שגויה. */
:root {
  /* ζ=1.0 · T=0.4 — הזזה/מיקום מחדש */
  --sp-move: linear(0.0000 0.0%, 0.0488 3.8%, 0.1561 7.7%, 0.2831 11.5%, 0.4087 15.4%, 0.5227 19.2%, 0.6210 23.1%, 0.7029 26.9%, 0.7695 30.8%, 0.8227 34.6%, 0.8645 38.5%, 0.8972 42.3%, 0.9223 46.2%, 0.9416 50.0%, 0.9563 53.8%, 0.9674 57.7%, 0.9757 61.5%, 0.9820 65.4%, 0.9867 69.2%, 0.9902 73.1%, 0.9928 76.9%, 0.9947 80.8%, 0.9961 84.6%, 0.9971 88.5%, 0.9979 92.3%, 0.9985 96.2%, 1.0000 100.0%);
  --sp-move-t: 580ms;
  /* ζ=1.0 · T=0.3 — פקדים, גילוי שדה */
  --sp-snap: var(--sp-move);
  --sp-snap-t: 435ms;
  /* ζ=0.8 · T=0.4 — חריגה של 1.5%, למומנטום בלבד */
  --sp-bounce: linear(0.0000 0.0%, 0.0509 3.8%, 0.1682 7.7%, 0.3126 11.5%, 0.4589 15.4%, 0.5928 19.2%, 0.7071 23.1%, 0.7996 26.9%, 0.8711 30.8%, 0.9239 34.6%, 0.9611 38.5%, 0.9859 42.3%, 1.0014 46.2%, 1.0101 50.0%, 1.0142 53.8%, 1.0152 57.7%, 1.0143 61.5%, 1.0125 65.4%, 1.0103 69.2%, 1.0081 73.1%, 1.0061 76.9%, 1.0044 80.8%, 1.0030 84.6%, 1.0019 88.5%, 1.0011 92.3%, 1.0006 96.2%, 1.0000 100.0%);
  --sp-bounce-t: 580ms;
}
/* ⚠️ נפילה אחורה לדפדפן בלי `linear()` — קפיץ מקורב, לא ליניארי. */
@supports not (transition-timing-function: linear(0 0%, 1 100%)) {
  :root { --sp-move: cubic-bezier(.22,1,.36,1); --sp-snap: cubic-bezier(.22,1,.36,1);
          --sp-bounce: cubic-bezier(.34,1.56,.64,1); }
}

:root {
  /* ⚠️⚠️⚠️ **הבלוק הזה היה מוצהר על `.sq` — ולא היה שום אלמנט `.sq`.**
     נמדד בדפדפן ב-03/09/2026: `document.querySelectorAll('.sq').length`
     מחזיר **0** בכל המערכת, כולל ב-`/sea`. כלומר 29 הטוקנים האלה —
     סולם הטיפוגרפיה, המרווחים, החומרים וסולם הדיו — **לא נפתרו לאף
     אלמנט מעולם**, וכל כלל ב-`glass.css` וב-`sea.css` שהפנה אליהם
     נפל בשקט לירושה. זו לא הייתה ״הגדרה מודולרית״ אלא **קוד מת**.
     ⚠️ ההעברה ל-`:root` היא מה שמפעיל אותם לראשונה. ראה
     `docs/dashboard/DESIGN_TOKENS.md` ו-`verify_tokens_global`.
     ⚠️⚠️ `font-size` / `line-height` / `letter-spacing` / `font-family`
     **נשארים על `.sq`** ואינם עולים לכאן: הם משנים את גודל הבסיס של
     כל עמוד במערכת, וזה שינוי אחר לגמרי מהפעלת טוקנים. */
  /* ---------- 2 · טיפוגרפיה (§15) ------------------------------------------
     ⚠️⚠️ **tracking הוא תלוי-גודל, ולעולם לא ערך אחד לכל הגדלים.**
     טקסט תצוגה גדול רוצה tracking **שלילי** (האותיות נקראות רחוקות מדי
     כשהן גדלות); טקסט קטן רוצה מעט **חיובי**. ערך `letter-spacing` קבוע
     הוא שגוי במקום כלשהו.
     ⚠️⚠️ **וכל הסולם ב-`rem`** — §15 דורש לכבד את הגדרת גודל הטקסט של
     המשתמש ולהגדיל את הפריסה **איתו**. הרצפות הפיזיות (יעד מגע, שדה
     16px) נשמרות דרך `max()` ולכן הן גדלות ולא נשברות. */
  /* ⚠️⚠️ **דרגת ״מספר גיבור״** — הסולם נעצר ב-1.75rem, ושלושת המספרים
     הגדולים בדאשבורד צריכים ~3.5rem. §15: tracking שלילי **גדל** עם
     הגודל, ולכן -.026 ולא -.022.
     ⚠️ **המשקל שונה בין המצבים:** גופן בהיר על רקע כהה נראה עבה יותר
     מאותו משקל על רקע בהיר. ‏700 בבהיר, 600 בכהה — טוקן ולא ליטרל,
     אחרת מי שמעתיק את השורה בכהה מקבל טקסט שמן. */
  --t-hero: 3.5rem;     --t-hero-track: -.026em;  --t-hero-lead: 1.0;
  --t-hero-weight: 700;
  --t-large: 1.75rem;   --t-large-track: -.022em; --t-large-lead: 1.12;
  --t-title: 1.0625rem; --t-title-track: -.011em; --t-title-lead: 1.3;
  --t-body:  1rem;      --t-body-track:  0;       --t-body-lead:  1.55;
  --t-sec:   .9375rem;  --t-sec-track:   0;       --t-sec-lead:   1.5;
  --t-cap:   .8125rem;  --t-cap-track:   .006em;  --t-cap-lead:   1.55;
  --t-over:  .75rem;    --t-over-track:  .07em;   /* uppercase — tracking חיובי גדול */

  /* ---------- 3 · מרווח ורדיוס, ב-rem ---------- */
  --sp-1: .25rem; --sp-2: .5rem; --sp-3: .75rem; --sp-4: 1rem;
  --sp-5: 1.25rem; --sp-6: 1.5rem; --sp-8: 2rem;
  --r-group: 1rem; --r-ctl: .625rem;
  /* ⚠️ רצפות פיזיות: 44px יעד מגע, 16px שדה (חובת אייפון — מתחת לזה
     אייפון מגדיל את המסך בכל מיקוד). `max()` שומר עליהן וגם מאפשר להן
     לגדול עם הגדרת המשתמש. */
  --tap: max(44px, 2.75rem);
  --fs-field: max(16px, 1rem);

  /* ---------- 4 · חומרים (§12) ---------- */
  --mat-ground: var(--card);                                  /* קרקע התוכן */
  --mat-row: var(--card);                                     /* ⚠️ אטום — ראה למטה */
  --mat-hair: color-mix(in srgb, var(--ink) 11%, transparent);
  --mat-rim: color-mix(in srgb, var(--ink) 58%, transparent);  /* גבול פקד — WCAG 1.4.11 */
  --mat-focus: color-mix(in srgb, var(--brand) 82%, var(--ink));
  --ink-2: color-mix(in srgb, var(--ink) 62%, var(--card));
  /* ⚠️⚠️ **46% נמדד 2.82 בכותרת הקבוצה ונפל מ-AA.** §12 אומר את זה
     במפורש על טקסט מעל חומר: *"don't use flat gray text — use
     higher-contrast, slightly heavier weight"*. הערך נבחר במדידה. */
  --ink-3: color-mix(in srgb, var(--ink) 72%, var(--card));
  /* ⚠️⚠️ **טקסט מעל משטח מגוון דורש יותר ניגודיות מטקסט מעל הכרטיס** —
     וזו בדיוק הנקודה של §12 (vibrancy): *"Over blurred/translucent
     surfaces, don't use flat gray text — use higher-contrast, slightly
     heavier weight."* נמדד: `--ink-2` (62%) נתן **3.94** על מסלול הבורר
     ו-**4.17** על רקע שלב 4. זה **לא** תיקון נקודתי לשני אלמנטים אלא
     טוקן לתפקיד: כל טקסט משני שיושב על גוון ולא על `--card`. */
  --ink-on-tint: color-mix(in srgb, var(--ink) 78%, var(--card));
  --tint: var(--brand-ink);
  /* ---------- 4ב · צל תלוי-הקשר (§12) ----------
     ⚠️⚠️ **§12 דורש צל **כבד יותר** מעל תוכן עמוס ו**קל** מעל רקע חלק.**
     צל אחיד לכולם הוא מה שמשטח מסך: כרטיס שמרחף מעל מפה זקוק להפרדה
     שכרטיס על קרקע חלקה אינו זקוק לה, ובאותו צל שניהם נראים מודבקים.
     ⚠️ ‏`--shadow` הקיים ב-`styles.css` מוגדר **פעמיים** באותו `:root`
     (שורות 29 ו-583; השנייה גוברת והראשונה מתה). לא נגעתי בו — הטוקנים
     כאן חדשים ולתפקיד, ולא דורסים אותו. */
  /* ---------- 4ג · צבעי מצב (טוקן, לא ליטרל) ----------
     ⚠️⚠️ **הגוונים נגזרים מ-`STATUS_META` בשרת ומ-`courier.js`** —
     שם הם חיים כליטרלים (`#dc2626`, `#e0a106`…) ומשמשים באדג׳ים
     בכל המערכת. כאן הם הופכים לטוקנים כדי שפס האקסנט, הצ׳יפ והנקודה
     על המפה ידברו **שפה אחת**; לא נגעתי בליטרלים הקיימים, ולכן אין
     דלתא באדג׳ים.
     ⚠️ **שני חריגים בכוונה, לפי הכרעת טל ״אין כחול״:** ״נחת/בעמילות״
     היה `#2563eb` ו״שוחרר״ `#0ea5e9` — שניהם כחולים. כאן הם טורקיז.
     הליטרלים במסכים האחרים נשארו; זה טוקן חדש לתפקיד חדש.
     ⚠️ ובכהה — **כל גוון מקבל תאום**. ליטרל צבע קשיח בלי גרסה כהה
     נמדד בעבר 12 כשלי ניגודיות. */
  --st-stuck:   #c0272d;
  --st-broker:  #b45309;
  --st-pickup:  #5b6472;
  --st-transit: #a86a06;
  --st-landed:  #0f7b74;
  --st-none:    #7d7d85;
  --st-done:    #15803d;
  --el1-shadow: 0 1px 2px rgba(20,28,44,.04), 0 8px 24px -8px rgba(20,28,44,.08);
  --el2-shadow: 0 2px 6px rgba(20,28,44,.06), 0 18px 40px -12px rgba(20,28,44,.16);
  --el2-shadow-on-content: 0 3px 8px rgba(20,28,44,.10), 0 22px 48px -12px rgba(20,28,44,.26);
  --el3-shadow: 0 1px 3px rgba(20,28,44,.08);
  /* וינייטה פנימית — מה שמייצר ״שקוע״ ולא ״מונח״ */
  --inset-vignette: inset 0 0 40px -14px rgba(20,28,44,.22);
  --warn-bg: color-mix(in srgb, var(--warn) 16%, var(--card));
  --warn-ink: color-mix(in srgb, var(--warn) 62%, #000);
  /* ⚠️ באדג׳ "ענה" — ירוק. הזוג נכתב **גם בבסיס וגם בדארק**: טוקן צבע
     שמוגדר בצד אחד בלבד הופך ל-`var()` לא-חוקי בצד השני, והצבע נופל
     לירושה בלי שום שגיאה. */
  --good-bg: color-mix(in srgb, var(--good) 15%, var(--card));
  --good-ink: color-mix(in srgb, var(--good) 68%, #000);
  /* ⚠️⚠️⚠️ **`--good-text` הוסר מכאן — והוא היה הפגם היחיד של ההעלאה.**
     ‏`styles.css` מגדיר אותו ב-`:root` כ-`#15803d` (בהיר) ו-`#5ddb85`
     (כהה), עם הערה שמתעדת ש-`--good` עצמו נמדד **3.30:1 ונכשל** ככתב.
     ‏`glass.css` נטען **אחרי** `styles.css`, ולכן הבלוק המועלה דרס
     את הערך הבטוח ב-`var(--good)` — ו-`verify_sea_compare_render`
     נצבע אדום על **3.0** בבהיר ו-4.2 בכהה, בכיתוב ״ההצעה הזולה מבין
     אלה שעומדות בתנאים״ בחלון ההשוואה.
     ⚠️⚠️ **וכך זה חמק ממני:** בדיקת ההתנגשויות שלי הרצתי עם
     ‏`grep "--tok\s*:"` — ו-BSD grep על מק **אינו מפרש `\s`**, ולכן
     היא החזירה ״אפס התנגשויות״ על 39 טוקנים בלי לבדוק כלום.
     נעול ב-`verify_tokens_global` ⑪: הבלוק אינו רשאי להגדיר טוקן
     שכבר מוגדר ב-`styles.css`. */

}

/* ⚠️⚠️⚠️ **הבלוק הזה חייב להישאר על `.sq` ואסור לו לעלות ל-`:root`.**
   בגרסה הראשונה של ההעלאה הוא עלה בטעות — ולא נראה שבור, כי
   `--t-body` הוא `1rem` ו-`rem` על אלמנט השורש מתייחס לגודל
   ההתחלתי, כלומר `font-size: 1rem` על `:root` הוא **no-op** (נמדד:
   16px לפני ואחרי, אפס שינוי ב-`/air`). זו פצצת זמן: ברגע שמישהו
   ישנה את `--t-body` ל-`1.05rem`, השורש יגדל **בהצטברות** בכל טעינה
   של הערך, וכל עמוד במערכת יזוז. הטוקנים עולים; **גודל הבסיס לא.** */
.sq {
  font-size: var(--t-body);
  line-height: var(--t-body-lead);
  letter-spacing: var(--t-body-track);
  font-variant-numeric: tabular-nums;
  font-optical-sizing: auto;
}
/* ⚠️ הגופן: §15 — "ברירת המחדל היא גופן המערכת לפני גופן מותאם; הוא כבר
   מגיע עם optical sizing, טבלאות tracking וכיוונון לקריאוּת."
   ‏`system-ui` על מק ואייפון = **SF Hebrew**, שהוא הגופן האמיתי של השפה
   הזאת. ⏸️ **זו הכרעה של טל** — המערכת מגדירה `"Segoe UI", "Heebo"`.
   טוקן אחד, שורה אחת להחזיר. */
.sq { font-family: system-ui, -apple-system, "Segoe UI", "Heebo", Arial, sans-serif; }

/* ⚠️ הדארק חייב לעלות **יחד** עם הבסיס. טוקן שמוגדר בצד אחד בלבד
   נשאר על ערך הבהיר בכהה — וזו בדיוק המלכודת שההערה על `--good-bg`
   כמה שורות מעל מזהירה מפניה. המערכת עובדת ב-`data-theme` בלבד
   (אין `prefers-color-scheme` ב-`styles.css`), ולכן זה הסלקטור. */
html[data-theme="dark"] {
  --mat-hair: color-mix(in srgb, #fff 14%, transparent);
  --mat-rim: color-mix(in srgb, #fff 42%, transparent);
  --ink-2: color-mix(in srgb, var(--ink) 72%, var(--card));
  --ink-3: color-mix(in srgb, var(--ink) 78%, var(--card));
  --ink-on-tint: color-mix(in srgb, var(--ink) 86%, var(--card));
  --warn-ink: color-mix(in srgb, var(--warn) 88%, #fff);
  --good-bg: color-mix(in srgb, var(--good) 22%, var(--card));
  --good-ink: color-mix(in srgb, var(--good) 82%, #fff);
  /* ⚠️ `--good-text` — ראה ההערה בבלוק הבהיר. `styles.css` מחזיק אותו. */
  --t-hero-weight: 600;
  --st-stuck:   #ff6b6b;
  --st-broker:  #f0a94c;
  --st-pickup:  #97a1b0;
  --st-transit: #e3b04b;
  --st-landed:  #3fbfae;
  --st-none:    #98a0ac;
  --st-done:    #4ade80;
  --el1-shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 24px -8px rgba(0,0,0,.45);
  --el2-shadow: 0 2px 6px rgba(0,0,0,.34), 0 18px 40px -12px rgba(0,0,0,.5);
  --el2-shadow-on-content: 0 3px 8px rgba(0,0,0,.44), 0 22px 48px -12px rgba(0,0,0,.62);
  --el3-shadow: 0 1px 3px rgba(0,0,0,.4);
  --inset-vignette: inset 0 0 40px -14px rgba(0,0,0,.5);
}

/* ==========================================================================
   ⚠️ `prefers-contrast: more` (§14) — נמדד ב-03/09/2026: **שני מופעים
   בכל `web/`.** §14 דורש רקעים כמעט-אטומים ומסגרת **מוגדרת**, ולא רק
   פחות שקיפות. ה-rim נשאר — הוא מה שמזהה את החומר.
   ========================================================================== */
@media (prefers-contrast: more) {
  .glass-lens { background: rgba(255,255,255,.94); }
  .glass-surface { background: rgba(255,255,255,.97); border-color: var(--mat-rim); }
  .glass-strong { background: rgba(250,250,252,.99); border-color: var(--mat-rim); }
  html[data-theme="dark"] .glass-lens { background: rgba(40,46,57,.94); }
  html[data-theme="dark"] .glass-surface { background: rgba(26,31,39,.97); }
  html[data-theme="dark"] .glass-strong { background: rgba(20,24,31,.99); }
  :root { --mat-hair: color-mix(in srgb, var(--ink) 34%, transparent); }
}

/* ⚠️⚠️ `[hidden]` מפסיד לכל `display` מפורש — נדרך בגרסה הקודמת. */
.sq [hidden] { display: none !important; }

/* ---------- 5 · בידוד דו-כיווני ---------- */
.sq-num  { unicode-bidi: isolate; direction: ltr; font-variant-numeric: tabular-nums; }
.sq-lat  { unicode-bidi: isolate; direction: ltr; }
.sq-name { unicode-bidi: isolate; }
.sq-nb   { white-space: nowrap; }

/* ---------- 6 · המסגרת: כרום צף, תוכן נגלל מתחתיו (§12) ----------------
   ⚠️⚠️ **הכרום אינו `sticky` וגם לא `fixed` — הוא `absolute` מעל גליל
   בגובה מלא.** שתי סיבות, ושתיהן חשובות:
   ‏(1) ‏§12 דורש שהתוכן ייגלל **מתחת** לחומר, ולא שרצועה אטומה תאכל פס
       קבוע מהמסך. רצועה שהיא אח ב-flex לא מאפשרת את זה.
   ‏(2) הכלל של טל **"sticky אחד בלבד בעמוד"** — כאן יש **אפס**. ‏`absolute`
       אינו נספר, וההתנהגות זהה בתוך מסגרת בגובה קבוע.
   ⚠️ ול-`.glass-surface` יש `backdrop-filter`, שיוצר **בלוק מכיל** — ולכן
   ה-`absolute` נמדד מול המסגרת ולא מול המסך. זו המלכודת המתועדת
   ב-CLAUDE.md, מנוצלת כאן בכוונה. */
.sq-shell {
  position: relative;
  height: min(100dvh, 56rem);
  /* ⚠️ שלב הבחירה הוא שני כרטיסים — גובה מסך מלא שם הוא חצי עמוד ריק. */
  border-radius: 1.25rem;
  overflow: hidden;
  background: var(--mat-ground);
  isolation: isolate;
}
.sq-shell.is-pick { height: auto; }
.sq-shell.is-pick .sq-scroll { position: static; inset: auto; }

.sq-scroll {
  position: absolute; inset: 0;
  overflow-y: auto; overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  /* ריפוד = גובה הכרום, כך שהתוכן מתחיל וגומר בגלוי אבל נגלל מתחתיו */
  padding: calc(var(--nav-h) + var(--sp-2)) var(--sp-4)
           calc(var(--bar-h) + env(safe-area-inset-bottom) + var(--sp-5));
  --nav-h: 3.25rem;
  --bar-h: 4.25rem;
  scroll-padding-top: var(--nav-h);
}

/* ---------- 6א · סרגל הניווט ---------- */
.sq-nav {
  position: absolute; inset-block-start: 0; inset-inline: 0; z-index: 3;
  height: var(--nav-h, 3.25rem);
  display: flex; align-items: center; gap: var(--sp-2);
  padding-inline: var(--sp-3);
  border-radius: 0;
}
/* ⚠️⚠️ **אפקט קצה-גלילה, לא קו מפריד** (§12). הקו ה-1px מתחת לכותרת
   דביקה הוא בדיוק מה ש-§12 אומר להחליף: במקומו **מסכת גרדיאנט שדועכת**,
   ומופיעה **רק כשהתוכן באמת נמצא מתחת לכרום**. */
.sq-nav::after {
  content: ""; position: absolute; inset-inline: 0; top: 100%; height: var(--sp-4);
  pointer-events: none; opacity: 0;
  background: linear-gradient(to bottom,
    color-mix(in srgb, var(--mat-ground) 78%, transparent), transparent);
  transition: opacity var(--sp-snap-t) var(--sp-snap);
}
.sq-shell.is-scrolled .sq-nav::after { opacity: 1; }

/* ⚠️ **Vibrancy** (§12): טקסט מעל חומר שקוף אינו אפור שטוח — משקל מעט
   כבד יותר, ניגודיות גבוהה, ובאמפ קטן ב-tracking. */
.sq-nav-title {
  font-size: var(--t-sec); line-height: 1.2; font-weight: 700;
  letter-spacing: .004em;
  opacity: 0; transform: translateY(.375rem);
  transition: opacity var(--sp-snap-t) var(--sp-snap),
              transform var(--sp-snap-t) var(--sp-snap);
}
.sq-shell.is-scrolled .sq-nav-title { opacity: 1; transform: none; }
.sq-nav-sp { flex: 1 1 auto; }

/* ---------- 6ב · כותרת גדולה שמתכנסת (§1 · משוב רציף) ------------------
   ⚠️ ההתכנסות מונעת **מהגלילה עצמה**, 1:1, ולא באנימציה שרצה בסוף.
   ‏`--collapse` נכתב מ-rAF ב-scroll. */
.sq-large {
  --collapse: 0;
  padding: var(--sp-2) 0 var(--sp-5);
  transform: translateY(calc(var(--collapse) * -.5rem));
  opacity: calc(1 - var(--collapse));
  will-change: transform, opacity;
}
.sq-large h1 {
  margin: 0;
  font-size: var(--t-large);
  line-height: var(--t-large-lead);
  letter-spacing: var(--t-large-track);
  font-weight: 800;
  text-wrap: balance;
}
.sq-large p {
  margin: var(--sp-2) 0 0; color: var(--ink-2);
  font-size: var(--t-cap); line-height: var(--t-cap-lead);
  letter-spacing: var(--t-cap-track);
  max-width: 34ch;
}

/* ---------- 6ג · סרגל הפעולה ---------- */
.sq-bar {
  position: absolute; inset-block-end: 0; inset-inline: 0; z-index: 3;
  min-height: var(--bar-h, 4.25rem);
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4);
  padding-bottom: calc(var(--sp-3) + env(safe-area-inset-bottom));
  border-radius: 0;
}
.sq-bar::before {
  content: ""; position: absolute; inset-inline: 0; bottom: 100%; height: var(--sp-5);
  pointer-events: none;
  background: linear-gradient(to top,
    color-mix(in srgb, var(--mat-ground) 78%, transparent), transparent);
}
.sq-bar-sp { flex: 1 1 auto; }

/* ---------- 7 · רשימה מקובצת (§16.6 פשטות · §16 קיבוץ) ----------------
   ⚠️⚠️ **זה השינוי הגדול.** במקום ערימה של תיבות עם מסגרת לכל שדה —
   קבוצה אחת מעוגלת, שורות עם קו-שערה ביניהן, תווית בהתחלה ופקד בסוף.
   ‏§16: *"קרבה מרמזת על קשר"* — הקיבוץ עושה את העבודה שהמסגרות עשו,
   בפחות דיו.
   ⚠️⚠️ **המשטח אטום, לא זכוכית** — §12: *"never stack a light translucent
   surface on another — legibility collapses."* הכרום שקוף, התוכן לא. */
.sq-group { margin: 0 0 var(--sp-6); }
.sq-ghead {
  /* ⚠️ **`flex` ולא `block`** — כותרת קבוצה יכולה לשאת מונה בקצה השני
     (`<span>שם</span><span class="n">3</span>`), וב-`block` שני הצמתים
     נדבקים זה לזה: "ייקבלו את הבקשה3". נמדד. */
  display: flex; flex-direction: row; align-items: baseline;
  justify-content: space-between; gap: var(--sp-2);
  font-size: var(--t-over); font-weight: 800; letter-spacing: var(--t-over-track);
  text-transform: uppercase; color: var(--ink-3);
  padding: 0 var(--sp-4) var(--sp-2);
}
.sq-ghead .n { flex: 0 0 auto; }
.sq-rows {
  background: var(--mat-row);
  border-radius: var(--r-group);
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 8px 24px -16px rgba(16,24,40,.18);
}
html[data-theme="dark"] .sq-rows {
  box-shadow: 0 1px 2px rgba(0,0,0,.4), 0 10px 28px -18px rgba(0,0,0,.7);
}
/* ⚠️ קו השערה **בין** שורות ולא סביבן, ולא מתחת לאחרונה. */
.sq-row + .sq-row { box-shadow: 0 -1px 0 var(--mat-hair); }
.sq-row {
  /* ⚠️⚠️⚠️ **`flex-direction: row` מוצהר במפורש — והפעם זו הפעם הרביעית
     בפרויקט הזה שהכלל הזה תופס.** ‏`styles.css:108` הוא
     `label { display:flex; flex-direction:column }`, והוא חל על **כל**
     `<label>` שאינו מצהיר כיוון בעצמו. ‏`.sq-row` הצהיר `display:flex`
     ו-`align-items:center` אבל **לא** כיוון — ולכן כל שורה נערמה: תווית
     מעל פקד, במקום תווית-בהתחלה ופקד-בסוף. נראה מושלם בקוד. */
  display: flex; flex-direction: row; align-items: center; gap: var(--sp-3);
  min-height: var(--tap);
  padding: var(--sp-2) var(--sp-4);
  position: relative;
}
/* ⚠️⚠️ **התווית מותרת להתכווץ ולעטוף, והערך מקבל רצפה.** נמדד ב-320px:
   תוויות ארוכות ("ימי דמורג' חופשיים", "החלפות (0 = ישיר)") עם
   `flex: 0 0 auto` לקחו כמעט את כל השורה, עמודת הערך התכווצה לאפס,
   **וגם ספרה אחת נחתכה** — "0" ו-"7" הופיעו חתוכים.
   ⚠️ **הכלל שנגזר מזה: מספר חייב להיראות במלואו, תמיד.** טקסט חופשי
   יכול להיגלל בתוך שדה (זו התנהגות רגילה); מספר חתוך הוא **נתון שגוי**,
   כי "1,85" נראה כמו מחיר תקין. ⇒ הרצפה על הערך, והוויתור על התווית. */
.sq-row > .lbl {
  flex: 0 1 auto; min-width: 0; font-size: var(--t-body); font-weight: 600;
  letter-spacing: var(--t-body-track);
}
.sq-row > .lbl .req { color: var(--tint); font-weight: 800; }
/* ⚠️⚠️ **`flex-wrap` — שורת השגיאה היא אחות של הקלט, לא בלוק מתחתיו.**
   ‏`.sq-err` מוגדר `display:block` עם `margin-top`, כלומר **נכתב מתוך
   הנחה שהוא יורד שורה** — אבל בתוך `.val` שהוא `display:flex` הוא פשוט
   פריט נוסף באותה שורה. עם "חסר" זה נראה תקין במקרה; ההודעה הראשונה
   שארוכה ממילה אחת (‏"משקל חייב להיות גדול מאפס") **חנקה את הקלט
   ונשברה לשתי שורות בתוך 119px**. נמדד. */
.sq-row > .val { flex: 1 1 auto; min-width: 6rem; display: flex;
  justify-content: flex-end; flex-wrap: wrap; }
.sq-row > .val > .sq-err { flex: 1 0 100%; text-align: end; }
.sq-row.is-stack > .val, .sq-row.is-long > .val { min-width: 0; }
/* שורה מוערמת — לטקסט ארוך, שם תווית-ואז-שדה קריאה יותר משורה אחת */
/* ⚠️ גם כאן **מוצהר**, ולא הסתמכות על הכלל הגלובלי שבמקרה נותן את
   התוצאה הנכונה — כלל שנדרס מרחוק נראה תקין לגמרי עד שהוא משתנה. */
.sq-row.is-stack { flex-direction: column; align-items: stretch; gap: var(--sp-2);
  padding-block: var(--sp-3); }
.sq-row.is-stack > .val { justify-content: stretch; }
/* ⚠️⚠️ **הערת שוליים לקבוצה, לא רמז לכל שדה** — §16.6: *"היה תמציתי"*.
   ‏12 רמזים מתחת ל-12 שדות הם 12 פסקאות; הערה אחת מסבירה את הקבוצה. */
.sq-gfoot {
  margin: var(--sp-2) 0 0; padding: 0 var(--sp-4);
  font-size: var(--t-cap); line-height: var(--t-cap-lead);
  letter-spacing: var(--t-cap-track); color: var(--ink-2);
}
.sq-gfoot b { color: var(--ink); font-weight: 700; }

/* ---------- 8 · פקדים ---------- */
.sq-in {
  font: inherit; font-size: var(--fs-field);
  min-height: var(--tap);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-ctl);
  border: 1px solid transparent;
  background: color-mix(in srgb, var(--ink) 5%, var(--card));
  color: var(--ink); text-align: end;
  width: 100%; box-sizing: border-box;
}
html[data-theme="dark"] .sq-in { background: color-mix(in srgb, #fff 8%, var(--card)); }
.is-stack .sq-in { text-align: start; }
textarea.sq-in { min-height: 4.5rem; line-height: var(--t-body-lead); resize: vertical;
  text-align: start; }
.sq-in::placeholder { color: var(--ink-3); }
/* ⚠️⚠️ **טבעת מיקוד = `outline` + `outline-offset`, ולא `box-shadow`** —
   הילה דורכת על ה-rim של החומר. הכלל הגלובלי `input:focus` בגיליון מוסיף
   הילה, ולכן היא **מבוטלת במפורש**. */
.sq :is(.sq-in, button, select, textarea, a, [tabindex]):focus-visible {
  outline: 2px solid var(--mat-focus); outline-offset: 2px;
}
.sq :is(.sq-in, input, select, textarea):focus { box-shadow: none; }
/* ⚠️ `.btn-sm` של המערכת הוא 30px ונפל מיעד המגע — נמדד. */
.sq .btn-sm { min-height: var(--tap); }

/* ---------- 8ג · משוב לחיצה (§1) --------------------------------------
   ⚠️⚠️ **הועבר מ-JS ל-CSS, וזה תיקון ולא סידור.** בגרסה הקודמת מאזין
   ‏`pointerdown` כתב `style.background` מוטבע. שלוש בעיות:
   ‏(1) ‏§1 דורש לבקר **כל** השהיה בנתיב הקלט — מאזין JS הוא קוד שרץ לפני
       שהמשתמש רואה משהו, ו-`:active` הוא מיידי ובחינם.
   ‏(2) ‏`background-color` **אינו** תכונה שמורכבת בקומפוזיטור (§11);
       ‏`opacity` על שכבה כן.
   ‏(3) סגנון מוטבע נלחם ב-CSS ואינו ניתן להפרעה נקייה (§3).
   ⚠️⚠️ **`--press` נצרך ואינו מוגדר מחדש.** ‏`glass.css` אומר במפורש:
   *"כל פקד חדש יורש מכאן. אין `:active { transform }` פר-כפתור"* — ולכן
   כאן זה `scale(var(--press))` עם `--press-t` של המערכת, ולא ערך משלי.
   שני משובים על אותה לחיצה זו תקלה מתועדת. */
.sq :is(.sq-del, .sq-add, .sq-seg button, .sq-sw):active {
  transform: scale(var(--press));
  transition-duration: var(--press-t);
}
/* ⚠️ הבועה **אינה** מתכווצת עם הכפתור — היא החומר שמתחתיו, ולא הפקד. */
.sq-seg button:active { transform: scale(var(--press)); }

/* ⚠️ הדגשת שורה — **רק בשורה שהיא באמת פעולה** (שורת מתג), ולא בשורה
   שיש בה שדה טקסט: לחיצה לתוך שדה אינה "הקשה על השורה", והבהוב שם קורא
   כאילו לחצת על משהו אחר. */
.sq-row:has(.sq-sw) { cursor: pointer; }
.sq-row:has(.sq-sw)::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: color-mix(in srgb, var(--ink) 8%, transparent);
  opacity: 0; transition: opacity var(--press-t) linear;
}
.sq-row:has(.sq-sw):active::after { opacity: 1; }
/* ⚠️ ‏§10: "cancel-by-dragging-away and back" — הגרירה מחוץ לשורה מבטלת,
   וחזרה אליה מחזירה. `:active` עושה בדיוק את זה לבד, בלי קוד. */

/* ⚠️ כפתור ראשי מושבת: טיפול מוגדר, ובלי קפיצת לחיצה. */
.sq .pbtn:disabled { opacity: .45; cursor: not-allowed; }
.sq .pbtn:disabled:active { transform: none; }

/* ---------- 8א · בורר מקטעים עם בועה קפיצית ---------- */
/* ⚠️⚠️ **הריפוד 0 והכפתורים `--tap` שלם.** נמדד: עם ריפוד 3px הם יצאו
   ‏**38px** ונפלו מיעד המגע. במסך מגע כל מקטע הוא יעד בזכות עצמו.
   ⚠️⚠️ **והמקטעים שווי-רוחב (`flex: 1 1 0`) — וזו לא קוסמטיקה.**
   כך רוחב הבועה הוא בדיוק `100%/n` **וקבוע**, והמעבר בין מקטעים הוא
   `translateX` ותו לא. בגרסה הקודמת הבועה הונפשה ב-`left` וב-`width` —
   **שתי תכונות פריסה**, ש-§11 אוסר במפורש ("animate only
   compositor-friendly properties — transform and opacity").
   ⚠️⚠️ וגרוע מזה: `left` **לא היה ברשימת ה-transition בכלל**, ולכן
   הבועה **קיפצה** למקום החדש ורק הרוחב הונפש. נראה כמו תקלה, והיה תקלה. */
.sq-seg { position: relative; display: inline-flex; padding: 0;
  border-radius: 980px; background: color-mix(in srgb, var(--ink) 7%, var(--card));
  --n: 2; --i: 0; }
html[data-theme="dark"] .sq-seg { background: color-mix(in srgb, #fff 10%, var(--card)); }
.sq-seg > .bub {
  position: absolute; inset-block: .1875rem; inset-inline-start: 0;
  width: var(--bw, 50%); border-radius: 980px;
  background: var(--card);
  box-shadow: 0 1px 3px rgba(16,24,40,.16), 0 0 0 .5px rgba(16,24,40,.06);
  /* ⚠️ RTL: המסלול מתחיל בימין, ולכן ההזזה שלילית. */
  transform: translateX(var(--bx, 0px));
  /* ⚠️⚠️ **`transform` בלבד ב-transition — `width` בכוונה מחוצה לו.**
     ‏`flex: 1 1 0` אינו מצליח להשוות את המקטעים: `min-width: auto` על
     פריט flex הוא min-content, ולכן "אשדוד" רחב מ"חיפה" (נמדד 67 מול 62)
     ובועה של `100%/n` יצאה **לא מיושרת ב-2–5px** לכל מקטע.
     ⇒ הרוחב **נקבע מיידית** (כתיבת פריסה אחת להקשה, לא פר-פריים) וההזזה
     היא זו שמונפשת. ‏§11 אוסר **להנפיש** תכונת פריסה, לא לקבוע אותה —
     והחלפת רוחב של 5px בזמן החלקה של 580ms אינה נראית. */
  transition: transform var(--sp-move-t) var(--sp-move);
}
html[data-theme="dark"] .sq-seg > .bub { background: color-mix(in srgb, #fff 22%, var(--card)); }
.sq-seg button {
  position: relative; z-index: 1; border: 0; background: none; font: inherit;
  font-size: var(--t-sec); font-weight: 700; color: var(--ink-on-tint);
  min-height: var(--tap); padding-inline: var(--sp-4);
  border-radius: 980px; cursor: pointer;
  white-space: nowrap;
  transition: color var(--sp-snap-t) var(--sp-snap),
              transform var(--press-t) var(--sp-snap);
}
.sq-seg button[aria-pressed="true"] { color: var(--ink); }

/* ---------- 8ב · מתג ---------- */
/* ⚠️⚠️ **המתג: האלמנט 44px, הצורה 32px.** מתג של אפל הוא ~31px גבוה,
   ולכן אין להגדיל את הצורה — אבל **יעד המגע חייב להיות 44**, וגרסה
   שהרחיבה רק את שטח הפגיעה ב-`::before` שקוף עדיין **נמדדה 32** (המדידה
   קוראת את גובה האלמנט, ובצדק). ⇒ הכפתור עצמו 44 ושקוף, **המסלול מצויר
   ב-`::before`** והידית ב-`::after`. הצורה זהה, המדידה אמיתית. */
.sq-sw { position: relative; width: 3.25rem; min-height: var(--tap); flex: 0 0 auto;
  border: 0; padding: 0; background: none; cursor: pointer;
  /* ⚠️⚠️⚠️ **כיוון ההזזה של הידית תלוי בכיוון הכתיבה, ואסור שיהיה קבוע.**
     הידית ממוקמת ב-`inset-inline-start` (ימין ב-RTL, **שמאל ב-LTR**),
     ולכן "דלוק" חייב להזיז אותה אל הקצה **הלוגי הנגדי**. ערך שלילי
     קבוע עבד ב-RTL ו**הוציא את הידית 17px מחוץ למסלול** במצב אנגלית —
     נמדד, וטל ראה את זה על המסך. ⇒ סימן ההזזה נגזר מ-`dir`. */
  --sw-dir: -1;
  /* ⚠️⚠️ **צבע המסלול הכבוי הוא טוקן ולא כלל.** גרסה שהגדירה אותו
     ישירות ב-`html[data-theme="dark"] .sq-sw::before` (0,2,1) **ניצחה
     את `.sq-sw[aria-checked="true"]::before`** (0,2,0) — כלומר הירוק של
     "דלוק" **לא הופיע כלל בדארק מוד**. נמדד: אותו יחס ניגודיות בשני
     המצבים. ⇒ הערכה קובעת את הטוקן, וה"דלוק" קובע את הרקע. */
  --sw-off: color-mix(in srgb, var(--ink) 52%, var(--card));
}
[dir="ltr"] .sq-sw { --sw-dir: 1; }
html[data-theme="dark"] .sq-sw {
  --sw-off: color-mix(in srgb, var(--ink) 42%, var(--card)); }
.sq-sw::before {
  content: ""; position: absolute; inset-block: calc((var(--tap) - 2rem) / 2); inset-inline: 0;
  border-radius: 980px;
  /* ⚠️⚠️ **המסלול הכבוי נמדד 1.56:1 מול הכרטיס — ו-WCAG 1.4.11 דורש 3:1
     לגבול של רכיב ממשק.** במצב כבוי המתג היה כתם אפור שכמעט אינו נבדל
     מהרקע, **והידית הלבנה כמעט אינה נבדלת מהמסלול** (גם 1.56).
     ⇒ הגוון הוכהה **וגם** נוסף rim: הגבול הוא מה שהתקן מודד, והוא גם
     מה שהופך את המתג הכבוי לרכיב במקום לכתם. */
  background: var(--sw-off);
  box-shadow: inset 0 0 0 1px var(--mat-rim);
  transition: background var(--sp-snap-t) var(--sp-snap);
}
.sq-sw::after {
  content: ""; position: absolute; top: 50%; inset-inline-start: .1875rem;
  width: 1.625rem; height: 1.625rem; margin-top: -.8125rem;
  border-radius: 980px; background: #fff;
  /* ⚠️ טבעת דקה סביב הידית — צל רך אינו גבול שניתן למדוד, והידית חייבת
     להיבדל מהמסלול בשני המצבים. */
  box-shadow: 0 1px 3px rgba(16,24,40,.3), 0 0 0 1px var(--mat-rim);
  /* ⚠️⚠️ **שתי התנועות בטרנספורם אחד, דרך משתנים.** ההזזה והכיווץ הם
     שתי תכונות של אותו `transform`; שני כללים נפרדים היו דורסים זה את זה
     והידית הייתה קופצת. */
  --kx: 0rem; --ks: 1;
  transform: translateX(var(--kx)) scaleX(var(--ks));
  transition: transform var(--sp-move-t) var(--sp-move);
}
/* ⚠️ ‏§1 — הידית מגיבה לנגיעה עצמה: מתרחבת מעט, כמו מתג אמיתי שנדחף.
   הפקד עצמו **אינו** מתכווץ כאן (זה היה שני משובים על אותה לחיצה);
   הכיווץ הוא של הידית בלבד. */
.sq-sw:active::after { --ks: 1.1; }
.sq-sw:active { transform: none; }
/* ⚠️⚠️ **הידית ממורכזת ב-`margin-top` ולא ב-`translateY`** — `:active`
   של המערכת דורס `transform`, וכפתור שמרוכז בטרנספורם **קופץ חצי-גובה
   בכל לחיצה** (מלכודת מתועדת, נמדדה 22px). */
.sq-sw[aria-checked="true"]::before { background: var(--good); }
/* ⚠️⚠️ **ההזזה נגזרת מכיוון הכתיבה** — ראה `--sw-dir`. ב-RTL הידית נעה
   שמאלה, ב-LTR ימינה, ובשניהם היא נשארת **בתוך** המסלול (3px מכל צד:
   מסלול 52, ידית 26, היסט 3 ⇒ מהלך 20 = 1.25rem). */
.sq-sw[aria-checked="true"]::after { --kx: calc(1.25rem * var(--sw-dir)); }



/* ---------- פקדי שורה גנריים -------------------------------------------
   ⚠️⚠️ **היו במוקאפ של מסך הבקשה, וזו הייתה טעות בגבול החילוץ.** ברגע
   שמוקאפ שני השתמש ב-`.sq-add`/`.sq-del` הם יצאו **21px** — כפתור בלי
   שום כלל — ונפלו מיעד המגע. נתפס במדידה, לא בקריאה.
   ⚠️ עמודת הכפתור חייבת להיות ברוחב הכפתור: ⋮ של 44px בעמודה של 30
   גולש 14px ומכסה את התוכן השכן (נמדד ב-390px). */
.sq-del { min-height: var(--tap); width: var(--tap); border-radius: var(--r-ctl);
  border: 0; background: color-mix(in srgb, var(--ink) 6%, var(--card));
  color: var(--ink); font: inherit; font-size: 1.0625rem; cursor: pointer; }
.sq-add { display: flex; align-items: center; gap: var(--sp-2);
  width: 100%; min-height: var(--tap); padding: var(--sp-2) var(--sp-4);
  border: 0; background: none; font: inherit; font-size: var(--t-body);
  font-weight: 650; color: var(--tint); cursor: pointer; text-align: start;
  box-shadow: 0 -1px 0 var(--mat-hair); }
.sq-add .plus { display: grid; place-items: center; width: 1.375rem; height: 1.375rem;
  border-radius: 980px; background: var(--tint); color: var(--card);
  font-size: .875rem; font-weight: 800; }


/* ---------- שורה עם ערך ארוך, במסך צר ---------------------------------
   ⚠️ ב-320px שדה כמו `liwei@fnceramics.example` בעמודה נגררת אינו קריא —
   אי אפשר לראות מה הקלדת. ‏`<input>` גולל, וזה תקין, אבל **ברוחב הזה
   התווית מעל השדה עדיפה על שורה אחת דחוקה.**
   ⚠️ מוגבל ל-`.is-long` ולא לכל השורות: מספר קצר בעמודה נגררת הוא **טוב
   יותר** — הוא מיושר עם המספרים שמעליו ומתחתיו, וזו כל התועלת ב-tabular. */
@media (max-width: 22rem) {
  .sq-row.is-long { flex-direction: column; align-items: stretch; gap: var(--sp-2);
    padding-block: var(--sp-3); }
  .sq-row.is-long > .val { justify-content: stretch; }
  .sq-row.is-long .sq-in { text-align: start; }
}

/* ---------- מסך בקשת המחיר: תמהיל · בחירת סוג · הודעות ------------------
   ⚠️⚠️ **הועבר מ-`<style>` המוטבע של `docs/mockups/sea-rfq-v1.html` ב-M3.**
   הוא ישב שם כ"רק מה שספציפי למסך הבקשה" — וברגע שהמסך האמיתי נבנה, עותק
   שני היה נסחף מהמוקאפ בשקט. ⚠️ ובפרט **שלושת אותות הנגישות** (§14) חייבים
   לשבת כאן: מסך שנבנה בלעדיהם נראה תקין לגמרי, והם נמדדים רק אצל מי
   שהדליק אותם. */

/* ---------- 9 · שורות התמהיל ---------- */
.sq-mixrow { display: grid; gap: var(--sp-2); align-items: center;
  grid-template-columns: 1fr 5.5rem var(--tap); padding: var(--sp-2) var(--sp-4);
  /* ⚠️ §8 — "רמז בכיוון המחווה": שורה חדשה **צומחת מכפתור ההוספה**,
     שיושב מתחתיה, ולכן המקור הוא הקצה התחתון. */
  transform-origin: 50% 100%;
}
.sq-mixrow + .sq-mixrow { box-shadow: 0 -1px 0 var(--mat-hair); }
.sq-mixrow.is-in { animation: rowIn var(--sp-bounce-t) var(--sp-bounce) both; }
.sq-mixrow.is-out { animation: rowOut var(--sp-snap-t) var(--sp-snap) both; }
@keyframes rowIn  { from { opacity: 0; transform: scaleY(.7) translateY(.75rem); } }
@keyframes rowOut { to { opacity: 0; transform: scaleY(.7) translateY(.5rem); } }
/* ⚠️ `--ink-2` על משטח 6% נמדד **4.01** ונפל. הצבע מלא, המשטח נשאר עדין. */

.sq-mixfoot { display: flex; align-items: baseline; gap: var(--sp-2);
  padding: var(--sp-3) var(--sp-4); box-shadow: 0 -1px 0 var(--mat-hair);
  font-size: var(--t-sec); font-weight: 600; color: var(--ink-2); }
.sq-mixfoot .n { font-size: 1.375rem; font-weight: 800; color: var(--ink);
  letter-spacing: -.015em; }



/* ---------- 10 · ביטול פעולה, לא דיאלוג אישור (§16.2) -------------------
   ⚠️⚠️ §16.2: *"סליחה — ביטול קל לפליטות, ודיאלוג אישור **רק** לפעולה
   הרסנית ובלתי-הפיכה (במשׂורה; שימוש מוגזם מאמן אנשים ללחוץ מבלי לקרוא)."*
   ⇒ הסרת שורת מכולה **אינה** פותחת דיאלוג. היא מסירה, ומציעה ביטול. */
.sq-undo { display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-4); box-shadow: 0 -1px 0 var(--mat-hair);
  font-size: var(--t-cap); color: var(--ink-2); }
.sq-undo button { border: 0; background: none; font: inherit; font-weight: 750;
  color: var(--tint); cursor: pointer; min-height: var(--tap);
  padding-inline: var(--sp-2); }

/* ---------- 11 · הודעות ---------- */
.sq-note { margin: var(--sp-3) 0 0; padding: var(--sp-3) var(--sp-4);
  border-radius: var(--r-group); font-size: var(--t-cap);
  line-height: var(--t-cap-lead); background: var(--warn-bg); color: var(--warn-ink); }
.sq-note b { font-weight: 800; }
.sq-err { display: block; margin-top: var(--sp-1); font-size: var(--t-cap);
  font-weight: 700; color: var(--tint); }
.sq-in[aria-invalid="true"] { border-color: var(--tint); }

/* ---------- 12 · תגית זהות ---------- */
.sq-chip { display: inline-flex; align-items: center; gap: var(--sp-1);
  font-size: var(--t-over); font-weight: 800; letter-spacing: .03em;
  padding: .25rem .625rem; border-radius: 980px;
  background: var(--ink); color: var(--card); }
.sq-ref { font-size: var(--t-cap); font-weight: 700; color: var(--ink-2); }

/* ---------- 13 · בוחר סוג הבקשה ---------- */
.sq-pick { display: grid; gap: var(--sp-3); }
.sq-pickcard {
  --i: 0;
  display: flex; flex-direction: column; gap: var(--sp-1);
  text-align: start; text-decoration: none; font: inherit; cursor: pointer;
  padding: var(--sp-5); border: 0; border-radius: var(--r-group);
  background: var(--mat-row); color: var(--ink);
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 10px 30px -18px rgba(16,24,40,.22);
  /* §12 — "Materialize, don't just fade": הכרטיס מגיע כחומר, בקנה מידה
     ובטשטוש, ולא בדעיכת אטימות שטוחה. */
  animation: cardIn var(--sp-move-t) var(--sp-move) both;
  animation-delay: calc(var(--i) * 55ms);
}
html[data-theme="dark"] .sq-pickcard {
  box-shadow: 0 1px 2px rgba(0,0,0,.4), 0 12px 32px -20px rgba(0,0,0,.8); }
@keyframes cardIn {
  from { opacity: 0; transform: scale(.965) translateY(.5rem); filter: blur(6px); }
  to   { opacity: 1; transform: none; filter: blur(0); }
}
.sq-pickcard .unit { font-size: var(--t-over); font-weight: 800;
  letter-spacing: var(--t-over-track); text-transform: uppercase; color: var(--tint); }
.sq-pickcard .name { font-size: var(--t-title); font-weight: 800;
  letter-spacing: var(--t-title-track); line-height: var(--t-title-lead); }
.sq-pickcard .desc { font-size: var(--t-cap); line-height: var(--t-cap-lead);
  color: var(--ink-2); }
.sq-pickcard .go { margin-top: var(--sp-2); font-size: var(--t-cap);
  font-weight: 750; color: var(--tint); }

/* ---------- 14 · אזור שלב 4 ---------- */
.sq-later { border-radius: var(--r-group); padding: var(--sp-4);
  background: color-mix(in srgb, var(--ink) 4%, var(--card));
  font-size: var(--t-cap); line-height: var(--t-cap-lead); color: var(--ink-on-tint); }
html[data-theme="dark"] .sq-later { background: color-mix(in srgb, #fff 6%, var(--card)); }
.sq-later b { color: var(--ink); font-weight: 750; }

/* ---------- 15 · שלושת אותות הנגישות (§14) -----------------------------
   ⚠️⚠️ **שלושה אותות עצמאיים, לא אחד.** תנועה מופחתת אינה "בלי משוב" —
   היא שקילות עדינה ולא-וסטיבולרית. */
@media (prefers-reduced-motion: reduce) {
  .sq *, .sq *::before, .sq *::after {
    animation-duration: .01ms !important; animation-delay: 0ms !important;
    transition-duration: 150ms !important;
  }
  /* דעיכת אטימות במקום החלקה/קפיץ; בלי חריגה ובלי טרנספורם */
  .sq-pickcard { animation: none; opacity: 1; }
  .sq-mixrow.is-in, .sq-mixrow.is-out { animation: none; }
  .sq-large { transform: none !important; }
  .sq-nav-title { transform: none; }
  .sq-seg > .bub, .sq-sw::after { transition: none; }
}
@media (prefers-reduced-transparency: reduce) {
  /* חומר קפוא/אטום: מעלים אטימות, מורידים טשטוש */
  .sq-nav, .sq-bar { background: var(--card) !important;
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
  .sq-nav::after, .sq-bar::before { display: none; }
  .sq-nav { box-shadow: 0 1px 0 var(--mat-hair); }
  .sq-bar { box-shadow: 0 -1px 0 var(--mat-hair); }
}
@media (prefers-contrast: more) {
  /* רקע כמעט-אטום עם גבול מוגדר ומנוגד */
  .sq { --mat-hair: color-mix(in srgb, var(--ink) 34%, transparent); }
  .sq-rows, .sq-pickcard { outline: 1px solid var(--mat-hair); }
  .sq-in { border-color: var(--mat-rim); }
  .sq-seg { outline: 1px solid var(--mat-hair); }
}

/* ---------- רשימת הבקשות ------------------------------------------------
   ⚠️⚠️ **הרשימה אינה במוקאפ של שלב 3** — הוא כיסה בחירת-סוג וטופס בלבד.
   היא נבנתה **מהשפה שכבר אושרה** (`.sq-row` בתוך `.sq-rows`) ולא מעיצוב
   חדש: בלי רשימה אפשר רק לפתוח בקשה ולעולם לא לחזור אליה.
   ⚠️ `flex-direction: row` **מוצהר** — `styles.css` קובע `column` לכל
   `<label>`, וזו הפעם החמישית שהכלל הזה תופס בפרויקט. ‏`.sq-listrow` הוא
   `<button>` ולא `<label>`, ולכן הוא אינו נופל לשם — אבל הצהרה מפורשת
   עולה שורה אחת ומסירה את השאלה. */
.sq-listrow {
  display: flex; flex-direction: row; align-items: center; gap: var(--sp-3);
  width: 100%; text-align: start; border: 0; background: none; font: inherit;
  color: inherit; cursor: pointer;
}
/* ⚠️ **התווית גדלה והתגים מתכווצים לתוכן** — הכלל הגנרי הוא ההפך
   (`.lbl { flex: 0 1 auto }` · `.val { flex: 1 1 auto }`), כי בשורת טופס
   הפקד הוא שצריך את המקום. בשורת רשימה הטקסט הוא התוכן. */
.sq-listrow > .lbl { display: flex; flex-direction: column; gap: .125rem;
  flex: 1 1 auto; min-width: 0; }
.sq-listrow > .val { flex: 0 0 auto; min-width: 0; }
.sq-listrow .sq-sub {
  font-size: var(--t-cap); font-weight: 500; color: var(--ink-2);
  letter-spacing: var(--t-cap-track);
  /* ⚠️ שתי שורות לכל היותר — שם לקוח ארוך ותיאור מטען דחפו את שורת
     הרשימה לגובה של חצי מסך ב-375px. */
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
.sq-listrow .sq-tags { display: flex; flex-direction: column; align-items: flex-end; gap: .25rem; }
/* ⚠️ תג הסוג ברשימה הוא **מידע ולא פקד** — גוון עדין, לא הצ'יפ ההפוך של
   הסרגל (שם הוא הזהות של המסך שנפתח). */
.sq-chip-q {
  background: color-mix(in srgb, var(--tint) 14%, var(--card));
  color: var(--tint);
}
.sq-listrow:active { transform: scale(var(--press)); transition-duration: var(--press-t); }
/* ⚠️ הדגשת שורה — הרשימה **היא** פעולה, בשונה משורה עם שדה טקסט. */
.sq-listrow::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: color-mix(in srgb, var(--ink) 8%, transparent);
  opacity: 0; transition: opacity var(--press-t) linear;
}
.sq-listrow:active::after { opacity: 1; }

/* ⚠️⚠️ **המסך חי בתוך `<main>` של המערכת, לא לבדו בעמוד.** רוחב קריא
   ומרווח — בלי זה השורות נמתחות על `--page-max: 1800px` והעין מאבדת את
   ההתחלה של השורה הבאה. */
.sea-body main { display: flex; justify-content: center; padding: var(--sp-4, 1rem); }
.sea-body .sq-shell { width: 100%; max-width: 44rem; }
/* ⚠️⚠️ **הכלל שמעל נכתב עבור מסך ה-RFQ בלבד, ו-`.sea-body` יושב גם על
   `sea-agents.html`** ⇒ ספריית הסוכנים ירשה מרכוז שלא נועד לה. ‏`main`
   שהוא `flex` נותן לפאנל את **רוחב התוכן** במקום את רוחב העמוד: נמדד
   ב-1600px כרטיס **1157px** ושוליים **222px בכל צד**, מול **1552px**
   ושוליים **24px** ב-`/air` — אותו רוחב מסך, אותו סוג מסך.
   ⚠️ **מחריגים את עמוד הסוכנים בלבד**, לפי הדגל `data-agl-page` שכבר קיים
   על ה-body שלו (אותו דגל שמפעיל את מפת הכיסוי). כל שאר `.sea-body` —
   כלומר `/sea` — **נמדד זהה בתו** לפני ואחרי.
   ⚠️ **לא לנסות "להעביר את המרכוז ל-`.sq-shell`"** — נמדד: `.sq-shell`
   **אינו קיים** במצב הריק של `/sea`, והמסך היה נמתח ל-`--page-max`.
   ⚠️⚠️ **וההחרגה הזאת היא לדסקטופ בלבד — ראה את הביטול בבלוק ה-40rem
   למטה.** בורר-תכונה ספציפי יותר מ-`.sea-body main`, ולכן הריפוד כאן דרס
   את `padding: 0` של המובייל ופתח פער של 24px בכל צד (נמדד ב-375px:
   הכרטיס ירד מ-375 ל-327). אחרי הביטול נמדד מול הבסיס: `childW` 375,
   `left` 0, אפס גלישה, אותו גובה מסמך — **המובייל אינו זז.** */
.sea-body[data-agl-page] main { display: block; padding-inline: 24px; }
/* ⚠️⚠️ **הגובה הוא מסך פחות מה שמעל המסגרת, ולא `100dvh` סתום.** במוקאפ
   המסגרת עמדה לבדה בעמוד; כאן יש מעליה ה-header של המערכת, ו-`100dvh`
   דחף אותה **118px מתחת לקצה המסך** (נמדד) ⇒ סרגל הפעולה — הכפתור
   הראשי היחיד בדף — פשוט לא נראה, והעמוד קיבל גליל שני.
   ⚠️ `--sq-top` נמדד ב-JS ונכתב על ה-root. ברירת המחדל `7rem` היא קירוב
   שמחזיק גם אם ה-JS לא רץ — מסגרת קצת נמוכה מדי עדיפה על סרגל נעלם.
   ⚠️ **`dvh` ולא `vh`**: `vh` נמדד לפי סרגל הכלים המקסימלי באייפון. */
.sea-body .sq-shell {
  height: min(calc(100dvh - var(--sq-top, 7rem)), 56rem);
  min-height: 26rem;
}
/* ⚠️ שלב הבחירה הוא **שני כרטיסים** — מסגרת בגובה מסך שם היא חצי עמוד
   ריק (נמדד). הכלל הזה חייב לבוא **אחרי** הגובה הקבוע ובאותה ספציפיות,
   אחרת `.sq-shell.is-pick` הכללי מפסיד ל-`.sea-body .sq-shell`. */
.sea-body .sq-shell.is-pick { height: auto; min-height: 0; }
@media (max-width: 40rem) { .sea-body main { padding: 0; }
  /* ⚠️⚠️ **וההחרגה של עמוד הסוכנים חייבת להיכנע כאן.** ‏09/09/2026:
     `.sea-body[data-agl-page] main` הוא בורר-תכונה ולכן **ספציפי יותר**
     מ-`.sea-body main`, ובלי השורה הזאת הריפוד של 24px שהוספתי לדסקטופ
     דרס את `padding: 0` של המובייל — נמדד ב-375px: הכרטיס ירד ל-327px
     ונפתח פער של 24px בכל צד, במקום מסך מלא. **הכלל נועד לדסקטופ בלבד.** */
  .sea-body[data-agl-page] main { padding-inline: 0; }
  .sea-body .sq-shell { border-radius: 0; } }

/* ---------- מסך "לפני שליחה" ורישום השליחה (M4) ------------------------
   ⚠️⚠️ **הועבר מ-`<style>` המוטבע של `docs/mockups/sea-rfq-send-v1.html`**,
   מאותה סיבה שהשאר הועבר ב-M3: עותק שני נסחף מהמקור בשקט. */
.ag { display: grid; gap: 2px; flex: 1 1 auto; min-width: 0; }
.ag .nm { font-size: var(--t-body); font-weight: 650; }
.ag .em { font-size: var(--t-cap); color: var(--ink-2); }
.ag .why { font-size: var(--t-cap); color: var(--warn-ink); font-weight: 650; }

.pill { display: inline-flex; align-items: center; gap: var(--sp-1); flex: 0 0 auto;
  font-size: var(--t-over); font-weight: 800; letter-spacing: .03em;
  padding: .25rem .5rem; border-radius: 980px; }
.pill.n { background: color-mix(in srgb, var(--ink) 9%, var(--card)); color: var(--ink); }
.pill.warn { background: var(--warn-bg); color: var(--warn-ink); }
.pill.good { background: var(--good-bg); color: var(--good-ink); }
/* ⚠️ "השליחה נכשלה" — הצבע הסמנטי של המערכת, לא אדום שרירותי. */
.pill.bad { background: color-mix(in srgb, var(--brand) 13%, var(--card)); color: var(--tint); }

/* ⚠️ תיבת סימון בשפת הזכוכית — הסימן ב-`::after` ו**רק כשמסומן**.
   ‏`color: transparent` על סימן שאינו מוצג נמדד **1.00** בכל סריקה
   עתידית; שקר שחוזר בכל סריקה הוא הרעש שמאמן אנשים להתעלם מהסורק. */
.chk { display: flex; flex-direction: row; align-items: center; gap: var(--sp-3);
  min-height: var(--tap); cursor: pointer; flex: 1 1 auto; min-width: 0; }
.chk input { position: absolute; opacity: 0; pointer-events: none; }
.sq .box { width: 24px; height: 24px; flex: 0 0 24px; border-radius: 8px;
  border: 1px solid color-mix(in srgb, var(--ink) 58%, transparent);
  display: grid; place-items: center; font-size: 15px; font-weight: 900; }
html[data-theme="dark"] .sq .box { border-color: color-mix(in srgb, #fff 46%, transparent); }

.chk input:checked + .box { background: var(--ink); border-color: var(--ink); color: var(--card); }
.chk input:checked + .box::after { content: "✓"; }
.chk input:focus-visible + .box { outline: 2px solid var(--mat-focus); outline-offset: 2px; }

/* ---------- סיכום "מה עומד לקרות" ---------- */
/* ⚠️ ארבעה מספרים, כי אלה הארבעה שקובעים אם ללחוץ. */
.sum { display: grid; gap: var(--sp-3); grid-template-columns: 1fr 1fr;
  padding: var(--sp-4); background: var(--mat-row); border-radius: var(--r-group);
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 8px 24px -16px rgba(16,24,40,.18); }
html[data-theme="dark"] .sum { box-shadow: 0 1px 2px rgba(0,0,0,.4),
  0 10px 28px -18px rgba(0,0,0,.7); }
.sum > div { display: grid; gap: 2px; min-width: 0; }
.sum .k { font-size: var(--t-over); font-weight: 800; letter-spacing: .07em;
  text-transform: uppercase; color: var(--ink-3); }
.sum .v { font-size: 1.375rem; font-weight: 800; letter-spacing: -.015em; }
.sum .s { font-size: var(--t-cap); color: var(--ink-2);
  overflow: hidden; text-overflow: ellipsis; }

/* ---------- רישום השליחה ---------- */
.log { display: grid; gap: var(--sp-1); flex: 1 1 auto; min-width: 0; }
.log .l1 { display: flex; flex-direction: row; align-items: baseline; gap: var(--sp-2);
  flex-wrap: wrap; }
.log .nm { font-size: var(--t-body); font-weight: 650; }
.log .meta { font-size: var(--t-cap); color: var(--ink-2); }

.lnk { border: 0; background: none; font: inherit; font-size: var(--t-cap); font-weight: 750;
  color: var(--tint); cursor: pointer; min-height: var(--tap); padding-inline: var(--sp-2); }
.sq .lnk:active { transform: scale(var(--press)); transition-duration: var(--press-t); }
@media (prefers-contrast: more) { .sq .sum { outline: 1px solid var(--mat-hair); } }

/* ---------- מסך הזנת ההצעה (M5) --------------------------------------
   ⚠️⚠️ **הועבר מ-`<style>` המוטבע של `docs/mockups/sea-quote-entry-v1.html`**,
   מאותה סיבה שהשאר הועבר: עותק שני נסחף מהמקור בשקט. */

/* ⚠️⚠️ **הגלולה יושבת בעמודת התווית ולא בעמודת הערך.** בעמודת הערך היא
   לוחצת את הקלט — נמדד: `1,850` דרש 68px וקיבל 52, והמסך הציג **`1,85`**.
   הגלולה מתארת את **השורה**, ולכן מקומה ליד התווית. ואז התווית צריכה
   רשות לעטוף לשתי שורות. */
.sq-row.row > .lbl { display: flex; flex-direction: row; align-items: center;
  gap: var(--sp-2); flex-wrap: wrap; }

/* ---------- שורת מחיר ליחידה ---------- */
/* ⚠️ הרוחב נגזר מ**המקרה הגרוע** ולא ממה שבמוקאפ: מחיר ימי יכול להיות בן
   שש ספרות עם מפריד ("125,000"), ולכן 9rem ולא 7.5.
   ⚠️⚠️ **הכלל שנגזר מזה: מספר חייב להיראות במלואו, תמיד.** טקסט חופשי
   יכול להיגלל בתוך שדה — זו התנהגות רגילה; `1,85` נראה כמו **מחיר תקין**,
   ולכן חיתוך שם הוא נתון שגוי ולא אי-נוחות. */
.pr { display: grid; gap: var(--sp-2); align-items: center;
  grid-template-columns: 1fr minmax(0, 9rem); padding: var(--sp-2) var(--sp-4); }
.pr + .pr, .pr + .chg, .chg + .chg { box-shadow: 0 -1px 0 var(--mat-hair); }
.pr .u { display: grid; gap: 2px; min-width: 0; }
.pr .u .n { font-size: var(--t-body); font-weight: 650; }
.pr .u .q { font-size: var(--t-cap); color: var(--ink-2); }
.chg { display: grid; gap: var(--sp-2); align-items: center;
  grid-template-columns: 1fr 6rem var(--tap); padding: var(--sp-2) var(--sp-4); }

/* ---------- מקור הערך (§5.2) ---------- */
/* ⚠️ **תצוגה צד-בצד: הערך, ולידו הקטע מהמייל שממנו הוא נלקח** — verbatim,
   ולא ניסוח מחדש. מבודד ל-LTR כי הוא באנגלית בתוך מסך RTL. */
.src { grid-column: 1 / -1; display: grid; gap: 2px; padding: var(--sp-1) 0 var(--sp-2); }
/* ⚠️⚠️ **`--ink-on-tint` ולא `--ink-2`** — נמדד **4.09** ונפל מ-AA. זה
   בדיוק התפקיד שהטוקן נוצר בשבילו: טקסט מעל משטח **מגוון** דורש יותר
   ניגודיות מטקסט מעל הכרטיס. */
.src q { font-size: var(--t-cap); line-height: 1.5; color: var(--ink-on-tint);
  font-style: normal; padding: var(--sp-2) var(--sp-3); border-radius: .5rem;
  background: color-mix(in srgb, var(--ink) 5%, var(--card));
  border-inline-start: 3px solid color-mix(in srgb, var(--ink) 22%, transparent);
  direction: ltr; unicode-bidi: isolate; text-align: start; }
html[data-theme="dark"] .src q { background: color-mix(in srgb, #fff 7%, var(--card)); }
.src .lbl { font-size: var(--t-over); font-weight: 800; letter-spacing: .07em;
  text-transform: uppercase; color: var(--ink-3); }

/* ---------- סימון "פוענח ולא אומת" (§5.2) ---------- */
/* ⚠️⚠️ **סימון בלתי-מתפספס, ולא אייקון קטן אפור** — פס בקצה השורה **וגם**
   גלולה עם מילים. */
.pr.is-parsed, .sq-row.is-parsed { position: relative; }
.pr.is-parsed::before, .sq-row.is-parsed::before {
  content: ""; position: absolute; inset-block: 0; inset-inline-start: 0; width: 3px;
  background: var(--warn); }
.mk { display: inline-flex; align-items: center; gap: var(--sp-1); flex: 0 0 auto;
  font-size: var(--t-over); font-weight: 800; letter-spacing: .03em;
  padding: .25rem .5rem; border-radius: 980px; }
.mk.parsed { background: var(--warn-bg); color: var(--warn-ink); }
.mk.edited { background: color-mix(in srgb, var(--good) 14%, var(--card));
  color: color-mix(in srgb, var(--good-text) 70%, #000); }
.mk.manual { background: color-mix(in srgb, var(--ink) 9%, var(--card)); color: var(--ink); }
.mk.miss { background: color-mix(in srgb, var(--brand) 13%, var(--card)); color: var(--tint); }
html[data-theme="dark"] .mk.edited { color: color-mix(in srgb, var(--good-text) 88%, #fff); }

/* ---------- מה ההצעה תעשה (§16 — אימות תוך כדי, לא בשמירה) ---------- */
.will { display: grid; gap: var(--sp-2); }
.will .li { display: flex; flex-direction: row; align-items: flex-start; gap: var(--sp-3);
  font-size: var(--t-cap); line-height: 1.55; }
.will .ic { flex: 0 0 auto; width: 1.25rem; height: 1.25rem; border-radius: 980px;
  display: grid; place-items: center; font-size: .75rem; font-weight: 900; margin-top: 1px; }
/* ⚠️⚠️ **הווי הירוק נמדד 4.42 בבהיר ו-4.29 בכהה — שניהם נופלים ב-AA.**
   ‏12px במשקל 900 אינו "טקסט גדול" (‏AA דורש ‎≥18.66px מודגש), ולכן הסף
   הוא 4.5 ולא 3. הערכים **נמדדו ולא נוחשו**: 74% נתן 4.42, ‏68% נותן
   5.03; בכהה 90% נתן 4.29 ו-78% נותן 4.98. ⚠️ **שני הכיוונים תוקנו
   יחד** — תיקון הבהיר לבדו היה משאיר את הכהה נופל, וזה בדיוק מה שקרה
   בסבב המתגים. */
.will .ok .ic { background: color-mix(in srgb, var(--good) 20%, var(--card));
  color: color-mix(in srgb, var(--good-text) 68%, #000); }
.will .no .ic { background: color-mix(in srgb, var(--brand) 15%, var(--card)); color: var(--tint); }
.will .warn .ic { background: var(--warn-bg); color: var(--warn-ink); }
.will b { font-weight: 750; color: var(--ink); }
html[data-theme="dark"] .will .ok .ic { color: color-mix(in srgb, var(--good-text) 78%, #fff); }

/* ---------- אישור לפני שהמחיר יוצא (§5.3.2) ---------- */
.appr { display: flex; flex-direction: row; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4); }
.appr .ag { display: grid; gap: 2px; flex: 1 1 auto; min-width: 0; }
.appr .nm { font-size: var(--t-body); font-weight: 650; }
.appr .em { font-size: var(--t-cap); color: var(--ink-2); }

/* ---------- מסך ההשוואה (M6) -------------------------------------------
   ⚠️⚠️ **הועבר מ-`<style>` המוטבע של `docs/mockups/sea-compare-v1.html`.** */

/* ---------- רצועת סיכום ---------- */
.top { display: grid; gap: var(--sp-2); grid-template-columns: repeat(3, 1fr);
  padding: var(--sp-4); background: var(--mat-row); border-radius: var(--r-group);
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 8px 24px -16px rgba(16,24,40,.18);
  margin-bottom: var(--sp-4); }
html[data-theme="dark"] .top { box-shadow: 0 1px 2px rgba(0,0,0,.4),
  0 10px 28px -18px rgba(0,0,0,.7); }
.top > div { display: grid; gap: 2px; min-width: 0; }
.top .k { font-size: var(--t-over); font-weight: 800; letter-spacing: .07em;
  text-transform: uppercase; color: var(--ink-3); }
.top .v { font-size: 1.25rem; font-weight: 800; letter-spacing: -.015em; }
.top .s { font-size: var(--t-cap); color: var(--ink-2); }

/* ---------- כרטיס הצעה ---------- */
.of { position: relative; background: var(--mat-row); border-radius: var(--r-group);
  box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 8px 24px -16px rgba(16,24,40,.18);
  margin-bottom: var(--sp-3); overflow: hidden; }
html[data-theme="dark"] .of { box-shadow: 0 1px 2px rgba(0,0,0,.4),
  0 10px 28px -18px rgba(0,0,0,.7); }
/* ⚠️ פס בקצה — "פוענח ולא אומת", בלתי-מתפספס. */
.of.is-parsed::before { content: ""; position: absolute; inset-block: 0;
  inset-inline-start: 0; width: 3px; background: var(--warn); }
.of-head { display: flex; flex-direction: row; align-items: baseline; gap: var(--sp-2);
  flex-wrap: wrap; padding: var(--sp-4) var(--sp-4) var(--sp-2); }
.of-head .nm { font-size: var(--t-title); font-weight: 800;
  letter-spacing: var(--t-title-track); }
.of-head .sp { flex: 1 1 auto; }

/* ---------- ⚠️⚠️ ארבעת המספרים — אותם מקומות בכל כרטיס -----------------
   §2.4: *"מחיר · זמן הפלגה · ימי חופש · transshipments — במקביל ובאותה
   בולטות. לא בטולטיפ. לא ב'עוד פרטים'."*
   ⇒ גריד של ארבע **בסדר קבוע**, כדי שהעין תשווה **למטה בעמודה** גם
   כשהכרטיסים מוערמים במסך צר. זה מה שהופך ערימה לטבלה בלי טבלה.
   ⚠️ **והמחיר אינו גדול מהשלושה האחרים** — "אותה בולטות" פירושה שווה;
   מחיר בגופן כפול הופך את שאר השדות לקישוט. */
.of-nums { display: grid; grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--mat-hair); }
.of-nums > div { padding: var(--sp-3) var(--sp-2); text-align: center;
  display: grid; gap: 2px; align-content: start; min-width: 0; }
.of-nums > div + div { box-shadow: -1px 0 0 var(--mat-hair); }
.of-nums .k { font-size: var(--t-over); font-weight: 800; letter-spacing: .05em;
  color: var(--ink-3); }
.of-nums .v { font-size: 1.1875rem; font-weight: 800; letter-spacing: -.015em;
  font-variant-numeric: tabular-nums; }
.of-nums .u { font-size: var(--t-over); color: var(--ink-2); }
.of-nums .v.miss { color: var(--tint); font-size: var(--t-cap); font-weight: 750;
  letter-spacing: 0; }

/* ---------- הנמלים: שורה ראשית ומודגשת (§2.5) ---------- */
.of-route { display: flex; flex-direction: row; align-items: center; gap: var(--sp-2);
  flex-wrap: wrap; padding: var(--sp-3) var(--sp-4);
  border-top: 1px solid var(--mat-hair); font-size: var(--t-body); font-weight: 700; }
.of-route .ar { color: var(--tint); font-weight: 800; }
/* ⚠️ החץ בכותרת הוא **צומת נפרד** בין שני קטעים מבודדים — רווח בקצה של
   קטע מבודד נבלע בגבול הבידוד, והעברית והלטינית נדבקות ("סין→HAIFA"). */
.sq-large .ar { color: var(--tint); font-weight: 800; unicode-bidi: isolate; }
.of-route .via { font-size: var(--t-cap); font-weight: 600; color: var(--ink-2); }

.of-meta { display: grid; gap: var(--sp-1); padding: var(--sp-3) var(--sp-4);
  border-top: 1px solid var(--mat-hair); font-size: var(--t-cap); color: var(--ink-2); }
.of-meta b { color: var(--ink); font-weight: 700; }
.of-brk { padding: var(--sp-2) var(--sp-4) var(--sp-3); font-size: var(--t-cap);
  color: var(--ink-2); display: grid; gap: 2px; }
.of-brk .li { display: flex; flex-direction: row; gap: var(--sp-2); }
.of-brk .li .n { margin-inline-start: auto; font-variant-numeric: tabular-nums;
  color: var(--ink); font-weight: 650; }

/* ---------- גלולות ---------- */
.p { display: inline-flex; align-items: center; gap: var(--sp-1); flex: 0 0 auto;
  font-size: var(--t-over); font-weight: 800; letter-spacing: .03em;
  padding: .25rem .5rem; border-radius: 980px; }
.p.best { background: var(--ink); color: var(--card); }
.p.warn { background: var(--warn-bg); color: var(--warn-ink); }
.p.miss { background: color-mix(in srgb, var(--brand) 13%, var(--card)); color: var(--tint); }
.p.part { background: color-mix(in srgb, var(--ink) 9%, var(--card)); color: var(--ink); }
.p.good { background: var(--good-bg); color: var(--good-ink); }

/* ---------- ⚠️⚠️ הדגל: אחד, במילים, אמבר — לא אדום (הכרעה 9) ---------- */
.flag { display: flex; flex-direction: row; gap: var(--sp-3); align-items: flex-start;
  margin: 0; padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--mat-hair);
  background: var(--warn-bg); font-size: var(--t-cap); line-height: 1.6;
  color: var(--warn-ink); }
.flag .ic { flex: 0 0 auto; width: 1.25rem; height: 1.25rem; border-radius: 980px;
  display: grid; place-items: center; font-size: .75rem; font-weight: 900;
  background: color-mix(in srgb, var(--warn) 34%, var(--card)); margin-top: 1px; }
/* ⚠️⚠️ **בדארק הסמל נמדד 3.84 ונפל.** ‏`--warn-ink` בדארק הוא **בהיר**,
   והרקע היה גוון ענבר על כרטיס כהה — כלומר בהיר על בהיר. ⇒ בדארק הרקע
   מוכהה מול **שחור** ולא מול הכרטיס. אותה משפחה של "ליטרל צבע קשיח
   חייב תאום בדארק". */
html[data-theme="dark"] .flag .ic {
  background: color-mix(in srgb, var(--warn) 30%, #000); }
.flag b { font-weight: 800; }
/* ⚠️ **למה אמבר ולא אדום:** אדום הוא צבע המותג כאן, ואדום על שורת מחיר
   נקרא "נפסל". ההודעה היא "זה הזול, ותסתכל לפני שתחליט".
   ⚠️ **והצבע אינו הערוץ היחיד** — יש טקסט, כי המסך נקרא בשמש. */

/* ---------- למה לא מוכתר ---------- */
.nocrown { display: flex; flex-direction: row; gap: var(--sp-3); align-items: flex-start;
  padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--mat-hair);
  font-size: var(--t-cap); line-height: 1.6; color: var(--ink-on-tint);
  background: color-mix(in srgb, var(--ink) 4%, var(--card)); }
html[data-theme="dark"] .nocrown { background: color-mix(in srgb, #fff 6%, var(--card)); }
.nocrown .ic { flex: 0 0 auto; width: 1.25rem; height: 1.25rem; border-radius: 980px;
  display: grid; place-items: center; font-size: .75rem; font-weight: 900;
  background: color-mix(in srgb, var(--ink) 12%, var(--card)); margin-top: 1px; }

.of-foot { display: flex; flex-direction: row; align-items: center; gap: var(--sp-2);
  flex-wrap: wrap; padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--mat-hair); }
.of-foot .sp { flex: 1 1 auto; }
/* ⚠️⚠️ **תווית של כפתור-גלולה לעולם לא נשברת לשתי שורות.** עם הכפתור
   השלישי ("הצעה ללקוח") טור הפעולות בגריד הרחב נעשה צר מדי, והדפדפן
   שבר את הטקסט **בתוך** גלולה בגובה קבוע ⇒ הכיתוב נחתך. נמדד ב-900px:
   רוחב 73.1px, `scrollHeight > clientHeight`. גם "ביטול הבחירה" נשבר
   ויצא 46px מול 44 של שכניו — אותה סיבה בדיוק, רק פחות בולטת.
   ⚠️ ו-`flex-wrap` למעלה הוא הצד השני של אותו מטבע: כשאין רוחב, השורה
   היא זו שנשברת — לא המילה. */
.of-foot button { white-space: nowrap; }

/* ---------- הודעת נמלים שונים (§2.5) ---------- */
.ports { display: flex; flex-direction: row; gap: var(--sp-3); align-items: flex-start;
  padding: var(--sp-3) var(--sp-4); border-radius: var(--r-group);
  margin-bottom: var(--sp-4); font-size: var(--t-cap); line-height: 1.6;
  background: color-mix(in srgb, var(--ink) 4%, var(--card)); color: var(--ink-on-tint); }
html[data-theme="dark"] .ports { background: color-mix(in srgb, #fff 6%, var(--card)); }
.ports b { color: var(--ink); font-weight: 750; }
.ports .ic { flex: 0 0 auto; width: 1.25rem; height: 1.25rem; border-radius: 980px;
  display: grid; place-items: center; font-size: .75rem; font-weight: 900;
  background: color-mix(in srgb, var(--ink) 12%, var(--card)); margin-top: 1px; }

.cmp-empty { padding: var(--sp-6) var(--sp-4); text-align: center; color: var(--ink-2);
  font-size: var(--t-cap); line-height: 1.7; }
.cmp-empty b { color: var(--ink); font-weight: 700; display: block;
  font-size: var(--t-body); margin-bottom: var(--sp-2); }

/* ---------- טבלה, מרוחב שבו היא באמת עדיפה ----------------------------
   ⚠️ מ-64rem הכרטיסים הופכים לשורות טבלה. **לא לפני** — טבלה שנגללת
   לצדדים היא בדיוק מה שהמסך הזה מחליף.
   ⚠️⚠️ **הסף היה 56rem ועלה ל-64rem (29/08/2026), בגלל הכפתור השלישי.**
   נמדד: טור הפעולות צריך **316px** לשלושת הכפתורים בשורה אחת, ושש
   העמודות שלפניו תופסות **592px** במינימום שלהן ⇒ 908px. ברוחב 896
   (‏56rem) הכרטיס הוא 834 בלבד, ולכן השורה נשברה לשתיים והכפתור
   הראשי נחת לבד בשורה שנייה. ב-64rem הכרטיס הוא ~958 והכול נכנס.
   ⚠️ מתחת לסף הכרטיסים נערמים — פריסה שנבדקה ועובדת, ולא מצב שבור. */
@media (min-width: 64rem) {
  .of { display: grid; align-items: center; margin-bottom: var(--sp-2);
    grid-template-columns: minmax(9rem, 1.4fr) minmax(10rem, 1.2fr) repeat(4, minmax(4.5rem, .7fr)) auto; }
  .of-head { grid-column: 1; padding: var(--sp-3) var(--sp-4); }
  .of-route { grid-column: 2; border-top: 0; padding-inline: var(--sp-2); }
  .of-nums { grid-column: 3 / 7; display: grid; grid-template-columns: subgrid;
    border-top: 0; }
  .of-nums > div + div { box-shadow: none; }
  .of-foot { grid-column: 7; border-top: 0; }
  .of-meta, .of-brk, .flag, .nocrown { grid-column: 1 / -1;
    border-top: 1px solid var(--mat-hair); }
}
/* ⚠️ נפילה אחורה לדפדפן בלי `subgrid`. */
@supports not (grid-template-columns: subgrid) {
  @media (min-width: 64rem) {
    .of-nums { grid-column: 3 / 7; grid-template-columns: repeat(4, 1fr); }
  }
}
/* ⚠️ המסך הזה **רחב יותר** מהשאר: ארבעה מספרים + מסלול + פעולות בשורה
   אחת דורשים מקום, וזו כל התועלת במעבר לטבלה. */
.sea-body .sq-shell.is-compare { max-width: 78rem; }

/* ══════════════════════════════════════════════════════════════════════
   זכוכית חיה — כרטיס הכניסה (הכרעת טל 07/09/2026)
   מוקאפ מאושר: docs/mockups/auth-cta.html
   ⚠️⚠️ **זה הופך שתי הכרעות קודמות של טל** בשפת הזכוכית: "כפתור ראשי —
   אטום" ו"שדות — אטומים". שתיהן שלו לשנות, ושתיהן שונו כאן במפורש.
   ⚠️⚠️ **תנאי מקדים:** הכרטיס נושא ענן צבע (`styles.css`). בלעדיו אין
   לזכוכית מה להראות והיא נראית אטומה לגמרי — נמדד לפני ההכרעה.
   ⚠️⚠️ **שקיפות היא שלושה מספרים ולא אחד**: מילוי, טשטוש, ובליק פנימי.
   מילוי של 15% מתחת לטשטוש של 18px נראה אטום — הטשטוש מוחק את מה
   שמאחור; והדגשה לבנה ב-95% הופכת להיות כל מה שרואים.
   ══════════════════════════════════════════════════════════════════════ */

/* ⚠️ **המצב הוא "מרחק מהמשטח".** במנוחה 40% ו-blur 7 — זכוכית מרוחקת.
   בריחוף ובמיקוד 10% ו-blur 2 — כאילו מקרבים אותה, ורואים דרכה נקי.
   שני הערכים נעים יחד; מילוי לבדו נקרא כדהייה ולא כחומר שזז. */
.auth2 .auth-pane .field,
.auth2 .auth-pane .phone-row,
.auth2 .auth-pane .primary {
  position: relative; isolation: isolate; border: 0; color: var(--ink);
  background: linear-gradient(180deg, rgba(255,255,255,.46), rgba(255,255,255,.34));
  -webkit-backdrop-filter: blur(7px) saturate(140%);
          backdrop-filter: blur(7px) saturate(140%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.62),
    inset 0 -1px 0 rgba(255,255,255,.26),
    inset 0 -10px 18px -12px rgba(20,28,44,.16),
    0 1px 1px rgba(20,28,44,.05),
    0 9px 20px -10px rgba(20,28,44,.22);
  transition: background .55s cubic-bezier(.32,.72,0,1),
              backdrop-filter .55s cubic-bezier(.32,.72,0,1),
              -webkit-backdrop-filter .55s cubic-bezier(.32,.72,0,1),
              box-shadow .45s ease, transform .45s cubic-bezier(.32,.72,0,1); }

/* ⚠️⚠️ **הברק מרוכז בקצוות ומסתובב עם הסמן.** רים ממוסך עם גרדיאנט
   שבהיר בשני הקצוות ועמום באמצע — כך הזוהר נתפס על העיקולים.
   ⚠️ **קצה נגדי כהה, לא רק לבן**: על משטח בהיר שפה לבנה על לבן אינה
   נראית; זכוכית מחזירה אור בצד אחד ו**קולטת צל** בנגדי, וזה הברק. */
.auth2 .auth-pane .field::before,
.auth2 .auth-pane .phone-row::before,
.auth2 .auth-pane .primary::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit;
  padding: 1.5px; pointer-events: none; z-index: -1;
  background: linear-gradient(var(--ga, 160deg),
    rgba(255,255,255,1), rgba(255,255,255,.28) 22%,
    rgba(20,28,44,.14) 48%, rgba(20,28,44,.07) 62%,
    rgba(255,255,255,.40) 80%, rgba(255,255,255,1));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
          mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude; }

/* ⚠️ הכתם הספקולרי — **רחב, עמום, ודועך לאט**. כתם קטן ובהיר נקרא
   כנקודת לייזר ולא כאור על חומר. */
.auth2 .auth-pane .field::after,
.auth2 .auth-pane .phone-row::after,
.auth2 .auth-pane .primary::after {
  content: ""; position: absolute; inset: 1px; border-radius: inherit;
  pointer-events: none; z-index: -1; transition: background .35s ease;
  background:
    radial-gradient(260px 190px at var(--gx, 50%) var(--gy, 0%),
      rgba(255,255,255,.34), rgba(255,255,255,.14) 42%, rgba(255,255,255,0) 88%),
    linear-gradient(var(--ga, 160deg),
      rgba(255,255,255,.34), rgba(255,255,255,.05) 46%, rgba(255,255,255,0) 66%); }

/* ⚠️ **הזכוכית מתקרבת** — בריחוף ובמיקוד. ההזזה היא פיקסל אחד ולא
   `scale`: אפקט הלחיצה מכויל ב-`--press`, ו-`transform` שני על אותו
   אלמנט דורס אותו. */
.auth2 .auth-pane .primary:hover:not(:disabled),
.auth2 .auth-pane .field:hover,
.auth2 .auth-pane .phone-row:hover,
.auth2 .auth-pane .field:focus-within,
.auth2 .auth-pane .phone-row:focus-within {
  background: linear-gradient(180deg, rgba(255,255,255,.13), rgba(255,255,255,.07));
  -webkit-backdrop-filter: blur(2px) saturate(125%);
          backdrop-filter: blur(2px) saturate(125%);
  transform: translateY(1px);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.5),
    inset 0 2px 6px -2px rgba(20,28,44,.18),
    inset 0 -1px 0 rgba(255,255,255,.2),
    0 1px 1px rgba(20,28,44,.04),
    0 4px 10px -6px rgba(20,28,44,.18); }

/* ══════════════════════════════════════════════════════════════════════
   ⚠️⚠️ **אין אדום במיקוד** (הכרעת טל). אבל מיקוד **חייב** להיראות —
   WCAG 2.4.7, וזו דרישה ולא טעם. נמדד: בלי שום סימון השתנו **19
   פיקסלים מתוך 96,800** בכניסה לשדה, כלומר מיקוד בלתי-נראה. הגרסה
   שכאן נמדדה **6,597 פיקסלים (4.4%)** — יותר מגרסת הטבעת האדומה שהוסרה
   (2.7%), ובלי טיפת אדום. שינוי כאן חייב מדידה חוזרת.
   ══════════════════════════════════════════════════════════════════════ */
.auth2 .auth-pane .field:focus-within::before,
.auth2 .auth-pane .phone-row:focus-within::before { padding: 2.4px;
  background: linear-gradient(var(--ga, 160deg),
    rgba(255,255,255,1), rgba(20,28,44,.34) 24%,
    rgba(20,28,44,.5) 50%, rgba(20,28,44,.34) 76%, rgba(255,255,255,1)); }
/* ⚠️ טבעת המיקוד הישנה על ה-`input` הפנימי — היא חוזרת מכלל גלובלי
   ומצייר טבעת ורודה בדיוק במקום שביטלנו. */
.auth2 .auth-pane .field input:focus,
.auth2 .auth-pane .phone-row input:focus,
.auth2 .auth-pane .field input:focus-visible,
.auth2 .auth-pane .phone-row input:focus-visible {
  outline: none; box-shadow: none; border-color: transparent; background: transparent; }

/* ══════════════════════════════════════════════════════════════════════
   דארק מוד לזכוכית של מסך ההתחברות (הכרעת טל 07/09/2026)
   ⚠️⚠️ **לא היה כאן שום כלל כהה.** כל החומר למעלה כתוב בערכים בהירים
   בלבד — מילוי `rgba(255,255,255,.46)`, מילויי `inset` לבנים — ולכן
   במצב כהה השדות והכפתור נשארו **לבנים על כרטיס שחור**. אותה שפה
   בדיוק, ערכים כהים: מילוי בהיר חלש, קצה עליון בהיר, קצה תחתון כהה.
   ⚠️ אין כאן `backdrop-filter` חדש — הטשטוש יורש מהכלל הבהיר ונשאר
   מוגדר במקום אחד.
   ══════════════════════════════════════════════════════════════════════ */
html[data-theme="dark"] .auth2 .auth-pane .field,
html[data-theme="dark"] .auth2 .auth-pane .phone-row,
html[data-theme="dark"] .auth2 .auth-pane .primary {
  background: linear-gradient(180deg, rgba(255,255,255,.11), rgba(255,255,255,.055));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.17),
    inset 0 -1px 0 rgba(0,0,0,.30),
    inset 0 -10px 18px -12px rgba(0,0,0,.45),
    0 1px 1px rgba(0,0,0,.30),
    0 9px 20px -10px rgba(0,0,0,.55); }
/* ⚠️ הרים: על משטח כהה הקצה הנגדי חייב להיות **שחור ולא כחלחל**,
   אחרת הוא נקרא כהילה ולא כצל. */
html[data-theme="dark"] .auth2 .auth-pane .field::before,
html[data-theme="dark"] .auth2 .auth-pane .phone-row::before,
html[data-theme="dark"] .auth2 .auth-pane .primary::before {
  background: linear-gradient(var(--ga, 160deg),
    rgba(255,255,255,.55), rgba(255,255,255,.14) 22%,
    rgba(0,0,0,.42) 48%, rgba(0,0,0,.22) 62%,
    rgba(255,255,255,.20) 80%, rgba(255,255,255,.55)); }
html[data-theme="dark"] .auth2 .auth-pane .field::after,
html[data-theme="dark"] .auth2 .auth-pane .phone-row::after,
html[data-theme="dark"] .auth2 .auth-pane .primary::after {
  background:
    radial-gradient(260px 190px at var(--gx, 50%) var(--gy, 0%),
      rgba(255,255,255,.13), rgba(255,255,255,.05) 42%, rgba(255,255,255,0) 88%),
    linear-gradient(var(--ga, 160deg),
      rgba(255,255,255,.13), rgba(255,255,255,.02) 46%, rgba(255,255,255,0) 66%); }
html[data-theme="dark"] .auth2 .auth-pane .primary:hover:not(:disabled),
html[data-theme="dark"] .auth2 .auth-pane .field:hover,
html[data-theme="dark"] .auth2 .auth-pane .phone-row:hover,
html[data-theme="dark"] .auth2 .auth-pane .field:focus-within,
html[data-theme="dark"] .auth2 .auth-pane .phone-row:focus-within {
  background: linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,.025));
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.13),
    inset 0 2px 6px -2px rgba(0,0,0,.45),
    inset 0 -1px 0 rgba(0,0,0,.25),
    0 1px 1px rgba(0,0,0,.25),
    0 4px 10px -6px rgba(0,0,0,.45); }
/* ⚠️ טבעת המיקוד בכהה — הגרסה הבהירה מסתמכת על קצה כהה על רקע בהיר,
   וכאן הכיוון הפוך: קצה בהיר על רקע כהה. */
html[data-theme="dark"] .auth2 .auth-pane .field:focus-within::before,
html[data-theme="dark"] .auth2 .auth-pane .phone-row:focus-within::before {
  background: linear-gradient(var(--ga, 160deg),
    rgba(255,255,255,.9), rgba(255,255,255,.42) 24%,
    rgba(255,255,255,.55) 50%, rgba(255,255,255,.42) 76%, rgba(255,255,255,.9)); }
html[data-theme="dark"] .auth2 .auth-pane input::placeholder { color: #9aa3b2; }

@media (prefers-reduced-motion: reduce) {
  .auth2 .auth-pane .primary:hover:not(:disabled),
  .auth2 .auth-pane .field:hover, .auth2 .auth-pane .phone-row:hover,
  .auth2 .auth-pane .field:focus-within,
  .auth2 .auth-pane .phone-row:focus-within { transform: none; } }
/* ⚠️ שקיפות מופחתת — חומר אטום, בלי טשטוש ובלי בליק. */
@media (prefers-reduced-transparency: reduce) {
  .auth2 .auth-pane .field, .auth2 .auth-pane .phone-row,
  .auth2 .auth-pane .primary { background: var(--card);
    -webkit-backdrop-filter: none; backdrop-filter: none; }
  .auth2 .auth-pane .field::after, .auth2 .auth-pane .phone-row::after,
  .auth2 .auth-pane .primary::after { display: none; } }
/* ⚠️ **גם האייקון בשדה נצבע אדום במיקוד** — כלל נפרד מטבעת המיקוד
   (`.login-card .field:focus-within .field-ic`), ולכן הוא שרד את
   ההסרה והמשיך לצבוע את המסך באדום בדיוק ברגע ההקלדה. */
.auth2 .auth-pane .field:focus-within .field-ic { color: var(--ink-3); }

/* ══════════════════════════════════════════════════════════════════════
   ⚠️⚠️ **המילוי האוטומטי של כרום הורס את הזכוכית.** כשהדפדפן משלים
   שם משתמש וסיסמה הוא צובע את השדה בתכלת משלו — צבע אטום שמצויר **מעל**
   החומר, ומוחק את השקיפות, את הענן שמאחור ואת הברק. זה מה שנראה כמו
   "מלבן כחול שבור" סביב השדה.
   ⚠️⚠️ **אי אפשר לבטל את זה עם `background`** — כרום מצייר אותו בשכבה
   פנימית שגוברת על כל הצהרת רקע. הדרך היחידה היא **מעבר צבע ארוך
   בטירוף**: כרום מנפיש את הצבע במקום לצייר אותו מיד, והמעבר פשוט
   לעולם לא מגיע. זה נראה כמו טריק והוא הפתרון המקובל היחיד.
   ⚠️ ‏`-webkit-text-fill-color` נדרש בנפרד: `color` לבדו אינו משפיע על
   טקסט שהדפדפן מילא.
   ⚠️ שני הסלקטורים — `:-webkit-autofill` הישן ו-`:autofill` התקני.
   ══════════════════════════════════════════════════════════════════════ */
.auth2 .auth-pane input:-webkit-autofill,
.auth2 .auth-pane input:-webkit-autofill:hover,
.auth2 .auth-pane input:-webkit-autofill:focus,
.auth2 .auth-pane input:-webkit-autofill:active {
  /* ⚠️⚠️ **בלי `-webkit-background-clip: text` כאן.** הוספתי אותו
     "ליתר ביטחון" יחד עם המעבר הארוך, והוא זה שהשאיר **מלבן אפור מאחורי
     הטקסט** בשדה שהדפדפן מילא: הוא חותך את הרקע לצורת הגליפים, ומה
     שנשאר הוא שארית של צבע המילוי במקום שקיפות. המעבר הארוך לבדו הוא
     הפתרון, והוא מספיק. */
  -webkit-text-fill-color: var(--ink);
  caret-color: var(--ink);
  background-color: transparent;
  transition: background-color 100000s ease-in-out 0s; }
.auth2 .auth-pane input:autofill,
.auth2 .auth-pane input:autofill:hover,
.auth2 .auth-pane input:autofill:focus {
  -webkit-text-fill-color: var(--ink);
  caret-color: var(--ink);
  background-color: transparent;
  transition: background-color 100000s ease-in-out 0s; }

/* ⚠️⚠️ **השדה הפנימי אינו תורם דבר — בכל מצב.** ‏`.login-card .field
   input` נושא `background: rgba(255,255,255,.6)`, וזו קופסה לבנה
   שמצוירת **בתוך** גלולת הזכוכית: על כרטיס לבן היא בלתי מורגשת, ומעל
   ענן צבע היא מלבן בהיר סביב הטקסט. ביטלתי אותה קודם רק ב-`:focus`
   וב-`:autofill` — ולכן היא חזרה ברגע שהשדה הפסיק להיות אחד מהם.
   ⚠️ המשטח הוא הגלולה; ה-`input` הוא טקסט בלבד. */
.auth2 .auth-pane .field input,
.auth2 .auth-pane .phone-row input,
.auth2 .auth-pane .code-input,
.auth2 .auth-pane textarea {
  background: transparent; background-color: transparent; background-image: none;
  border: 0; box-shadow: none; }
