שבעה כללים שמחזיקים את כל העיצוב
אם צריך להחליט משהו שלא מופיע במדריך, הכללים האלה מכריעים.
#f6f2ea), לא לבן. יש גם מצב כהה מלא. התפריט הצדדי שחור בשני המצבים.צבעים
שלוש קבוצות: צבעי מותג שלא משתנים בין המצבים, טוקנים שמשתנים בין בהיר לכהה, וצבעים של גרפים (בסעיף 05). בפיגמה כדאי להגדיר את הטוקנים כ־Variables עם שני Modes: Light ו־Dark, באותם שמות.
| טוקן | מצב בהיר | מצב כהה | איפה משתמשים |
|---|
שימו לב: הזהב לטקסט (--gold) כהה יותר במצב בהיר (#86622a) כדי שיהיה קריא על נייר. הזהב של פסים וכפתורים (--g = #b48a3c) קבוע. על רקע שחור משתמשים בזהב הבהיר (--g-hi = #d6b46e).
פונטים
שני פונטים מ־Google Fonts. גודל הטקסט הבסיסי 14.5px עם גובה שורה 1.55. סימן ₪ ומילים בעברית בתוך מספר גדול נופלים אוטומטית ל־Heebo, כי ב־Bebas Neue אין עברית.
גם לתוויות קטנות, טבלאות, כפתורים, גרפים וחלונות. משתמשים בפועל במשקלים 400, 600, 700, 800 ו־900.
משקל אחד בלבד (400). מספרים בקוביות, במשפך ובמרכז הגרף. תוויות באנגלית תמיד עם ריווח אותיות רחב: .08em עד .14em.
| תפקיד | דוגמה | פונט | גודל | משקל | ריווח אותיות | צבע |
|---|---|---|---|---|---|---|
| כותרת עמוד | שיווק | Heebo | 46px · בנייד 36px | 900 | -0.5px | --ink |
| שורה מעל הכותרת | 01 · MARKETING | Bebas Neue | 19px | 400 | .12em | --gold-hi |
| סימן המותג | ITZIK OZ | Bebas Neue | 34px · במסך כניסה 44px | 400 | .12em | --g-hi |
| כותרת מקטע (פס שחור) | לקוחות יועצים | Heebo | 22px | 900 | — | לבן על #111 |
| כותרת חלון קופץ | יעדים והזנות | Heebo | 22px | 900 | — | --ink |
| כותרת אזור | מדדים מרכזיים | Heebo | 17px | 800 | — | --ink |
| כותרת כרטיס / על הפרק | לידים לפי ערוץ | Heebo | 16px | 800 | — | --ink |
| מספר בקוביה | 241 | Bebas Neue | 34–54px (גמיש) | 400 | .02em | --ink |
| מספר בקוביה שחורה | ₪312K | Bebas Neue | 42–76px (גמיש) | 400 | .02em | --hero-num |
| מספר ארוך (מעל 9 תווים) | ₪1,284,500 | Bebas Neue | 26–44px · בקוביה שחורה 30–58px | 400 | .02em | --ink |
| מספר במשפך / ברשימה | 48% | Bebas Neue | 24px · בתגיות 16–20px | 400 | .02em | --ink |
| לשונית בתפריט | מכירות | Heebo | 15px | 600 | — | #c9c3b6 · פעילה #fff |
| טקסט רגיל | פגישות מיקוד שהתקיימו החודש | Heebo | 14.5px · גובה שורה 1.55 | 400 | — | --ink |
| תווית בקוביה | לידים החודש | Heebo | 13.5px | 700 | — | --ink-2 |
| כותרת עמודה בטבלה | אחוז המרה | Heebo | 13px | 800 | — | --muted |
| שורת הסבר מתחת למספר | לעומת ספט׳ (209) | Heebo | 12.5px | 400 | — | --muted |
| תגית סטטוס | תקין | Heebo | 12px | 800 | — | לפי הסטטוס |
| צירים ומקרא בגרף | ינו׳ פבר׳ מרץ | Heebo | 11.5px · מקרא 12px | 400 | — | --muted / --ink-2 |
מבנה, מרווחים ומסגרות
תפריט שחור קבוע בצד ימין, ובצד שמאל אזור התוכן: כותרת עמוד, אזורים עם כותרת וקו, ובתוכם רשת של קוביות וכרטיסים.
מידות ומרווחים
- תפריט צדדי: רוחב 244px, ריווח פנימי 24/16/18, רווח 24px בין החלקים. פס זהב של 4px בצד הפונה לתוכן.
- אזור התוכן: ריווח 30px למעלה, 34px בצדדים, 70px למטה. בנייד 18/16/60.
- כותרת העמוד: קו של 2px בצבע
--ruleמתחתיה, 18px מעל הקו ו־24px אחריו. - בין אזורים: 20px. בין קוביות וכרטיסים: 14px.
- ריווח פנימי: כרטיס 20/20/18, קוביית מדד 18/18/16, פריט "על הפרק" 18/20, חלון קופץ 24/26.
- רשתות: 2 עד 7 עמודות שוות, לפי מספר הקוביות בשורה.
מסגרות, פינות וצל
- פינות: 2px בכל מקום. שדות קלט: 0.
- צל: אין (
--shadow: none). - כרטיס וקוביה: 1px
--line. - פס תחתון: קוביה 3px · קוביה שחורה, "על הפרק" ופס מקטע 4px · מסך כניסה 5px.
- פס עליון: חלון קופץ 5px זהב.
- פס צד: הערה והגדרה 4px זהב · לשונית פעילה 4px
--g-hi. - קו מקווקו: 1px
--line-strong= נתון שעוד לא קיים. קו מקווקו כחול = נתון ידני או נתון דמה. - שדה בפוקוס: מסגרת זהב וקו זהב תחתון של 2px, בלי טבעת.
| רוחב מסך | מה משתנה |
|---|---|
| עד 1280px | רשתות של 5–7 עמודות יורדות ל־3 |
| עד 1180px | התפריט עובר לפס שחור למעלה, עם פס זהב תחתון. 4 ו־3 עמודות יורדות ל־2, ו־2 יורדות ל־1 |
| עד 900px | "על הפרק" ושתי טבלאות זו לצד זו עוברות לעמודה אחת |
| עד 700px | הלשוניות נגללות לרוחב, הלשונית הפעילה מסומנת בקו תחתון של 3px, כותרת העמוד יורדת ל־36px וכל הרשתות ל־2 עמודות |
רכיבים
כל רכיב כאן מוצג עם ה־CSS של הדשבורד. מתחת לכל אחד מופיעות המידות.
כותרת אזור = כותרת 17px, קו דק עד הקצה, וכפתור הסבר קטן. מתחתיה רשת הקוביות.
תפריט: רקע #111111, לשונית 15px/600 בצבע #c9c3b6, ריחוף #1b1b1b, פעילה #1d1d1d עם טקסט לבן, אייקון ותווית באנגלית ב־--g-hi ופס 4px בצד. בורר תקופה: רקע שחור עם ריווח 3px, כפתור פעיל בזהב עם טקסט שחור 800. כפתור משני: רקע --surface, מסגרת --line-strong, בריחוף מסגרת וטקסט בזהב.
מבנה קוביה: שורה עליונה (אייקון 30×30 על --gold-soft + תווית 13.5px/700 + תגית סטטוס משמאל) · מספר גדול ב־Bebas · שורת הסבר 12.5px · אופציונלי: פס התקדמות של 5px או קו מגמה של 34px. הפס התחתון 3px בצבע הסטטוס: ירוק, אדום, אדום כהה, זהב לכסף, או --line כשאין סטטוס. קוביה שחורה (hero): אחת או שתיים לכל היותר בעמוד, למדד הכי חשוב. קוביה מקווקוות: נתון שעוד לא קיים במערכת. בריחוף הקוביה עולה 2px.
תגית: 12px/800, ריווח 3/9, רקע בשקיפות 10% של הצבע. "דורש פעולה" היא היחידה עם רקע מלא וטקסט לבן. "ידני" בכחול: נתון שמוזן ביד ויחובר אוטומטית בהמשך. תגית איש צוות: רקע 15% מהצבע שלו ופס צד של 4px.
עד 3 פריטים, מהדחוף לפחות דחוף. כל פריט: תגית סטטוס · כותרת 16px/800 · משפט אחד 13.5px · קישור פעולה בזהב עם חץ. פס תחתון 4px בצבע הסטטוס. השם בממשק הוא תמיד "על הפרק", לא "מה עכשיו".
ביצועים לפי איש מכירות
| שם | לידים | פגישות שנקבעו | אחוז המרה | מול יעד | סטטוס |
|---|---|---|---|---|---|
| 1נציג א׳ | 13 | 14% | 81% | תקין | |
| 2נציג ב׳ | 6 | 8% | 46% | לתשומת לב | |
| 3נציג ג׳ | 3 | 6% | 24% | דורש פעולה | |
| 4נציג ד׳ | 0 | 0% | 0% | התחיל החודש |
כותרות עמודות: 13px/800 בצבע --muted, קו 2px --rule מתחת. שורות: 14px, ריווח 12/8, קו 1px --line, ריחוף --surface-2. העמודה הראשונה מיושרת לימין, ב־700 ובצבע --ink; כל השאר במרכז, עם ספרות ברוחב קבוע. מספר שאפשר ללחוץ עליו (פותח רשימת שמות) בזהב 800. דירוג: זהב, פלטינה וברונזה למקומות 1–3.
משפך המרה
סולם זהב מבהיר לכהה (--f1 עד --f5), כי זה אותו תהליך בשלבים ולא קטגוריות שונות. גובה פס 40px, מספר ב־Bebas 24px. בשני השלבים הכהים הטקסט לבן. משמאל: אחוז המעבר משלב קודם.
פס מקטע: מפריד בין חלקים גדולים באותו עמוד. רקע #111, 22px/900 לבן, אייקון בזהב, פס זהב תחתון 4px. כפתור ראשי: זהב #b48a3c, טקסט שחור 14px/800, ריווח 11/22, בריחוף #d6b46e. בורר מקטעים: הבחירה הפעילה בשחור עם מספר בזהב.
יעדים והזנות
--surface, פס זהב עליון 5px, וכיסוי מאחור rgba(10,10,10,.55).שדה: 15px, ריווח 10/12, בלי רדיוס, מסגרת --line-strong. בפוקוס (השדה הימני בדוגמה): מסגרת זהב וקו זהב תחתון 2px. כותרת קבוצה בטופס: 14px/900 עם פס זהב קטן לפניה וקו דק אחריה.
גרפים
הגרפים בדשבורד בנויים ב־Chart.js 4.4.1. הצבעים נבדקו כך שיהיו מובחנים זה מזה גם לעיוורי צבעים, בשני המצבים. הסדר שלהם קבוע: הסדרה הראשונה תמיד זהב.
- סדרה אחת (למשל לידים לפי חודש): כל העמודות בזהב
--s1. - כמה סדרות או קטגוריות: לפי הסדר
--s1עד--s8, תמיד מההתחלה. - "אחר" / "לא ידוע": תמיד באפור
--other, לא בצבע של סדרה. - שלבים של תהליך (משפך): סולם הזהב
--f1–--f5. - אדום וירוק לא משמשים כצבע של סדרה כדי להבדיל ביניהן. הם שמורים לסטטוס.
- כל גרף מקבל כפתור "טבלה" שמחליף אותו לטבלת מספרים.
- קו מגמה: הסדרה הראשית בזהב, עובי 2, שטח מתחת בשקיפות 12%, עיגול רק בנקודה האחרונה. השוואה (שנה קודמת) באפור
--other. יעד: קו מקווקו 4/4 בעובי 1.5, בצבע--muted. - עמודות: רדיוס 2, עובי מקסימלי 24px, בלי מסגרת. קווי רשת רק בציר הערכים, בצבע
--grid. בלי קו ציר. - עוגה: טבעת עם חור של 58%, הפרדה של 2px בצבע הרקע, סכום במרכז ב־Bebas 38px, ומספר לבן בתוך כל פרוסה (רק אם היא מעל 4%).
- מקרא: למטה, מימין לשמאל, עיגולים של 8px, 12px. Tooltip: רקע
--surface-2, מסגרת 1px, רדיוס 2, ריווח 12. - אנימציה: 700ms,
easeOutQuart.
לידים לפי ערוץ
הכנסות מול שנה קודמת ויעד
לידים לפי חודש · סדרה אחת
לידים, פגישות ועסקאות · כמה סדרות
מכירות לפי איש מכירות · עמודות לרוחב עם מספרים
כשעוברים למצב כהה (בכפתור למעלה), הגרפים מתרעננים עם הצבעים של המצב הכהה.
אייקונים
ספריית אייקוני קו בסגנון Lucide. כל אייקון 24×24, עובי קו 1.7, קצוות מעוגלים, בלי מילוי, בצבע הטקסט. הגודל הרגיל בממשק 18px, בתגיות 13px, בקוביות 16px בתוך ריבוע של 30px. השמות למטה הם השמות בקוד.
תנועה
תנועה עדינה וקצרה. היא מראה שמשהו נטען או השתנה, ולא מקשטת.
| מה | תנועה | משך ועקומה |
|---|---|---|
| כניסה של קוביות וכרטיסים | עולות 12px ומופיעות, אחת אחרי השנייה בהפרש של 35ms | .5s cubic-bezier(.2,.7,.2,1) |
| ריחוף על קוביה | עולה 2px | .2s ease |
| ריחוף על כפתור, לשונית, שורה | שינוי צבע בלבד | .15s |
| חלון קופץ | עולה 8px ומופיע | .2s ease |
| פסי משפך | מתמלאים ברוחב | .9s cubic-bezier(.2,.8,.2,1) |
| גרפים | מתמלאים בטעינה | 700ms easeOutQuart |
| נקודת "מחובר" | מהבהבת לאט | 2.4s |
| משתמש שביקש פחות תנועה | כל האנימציות כבויות (prefers-reduced-motion) | — |
כללי תוכן בממשק
חלק מהעיצוב הוא איך כותבים את המספרים והמילים על המסך.
סטטוס: שלוש מילים קבועות
- תקין הכל בסדר, אפשר להמשיך.
- לתשומת לב משהו זז לכיוון הלא טוב.
- דורש פעולה יש בעיה, וצריך לעשות משהו עכשיו.
- לידיעה מידע בלי שיפוט.
בדשבורד "לתשומת לב" באדום ו"דורש פעולה" באדום כהה מלא, לפי בחירה של איציק. לא משתמשים בצהוב.
מספרים וכותרות
- מספרים: עם פסיק אלפים (
12,480). כסף עם ₪ לפני המספר (₪312,480). אין נתון = קו מפריד (—), לא אפס. - שינוי: ▲ 12% ואחריו "לעומת ספט׳ (₪279,000)".
- כל עמוד: שורה באנגלית עם מספר (
01 · MARKETING), כותרת בעברית, ושורת תקופה. - "על הפרק" בכל עמוד: מה המספרים אומרים ומה עושים.
- כל מספר שאפשר נפתח בלחיצה לרשימת השמות שמאחוריו.
- נתון חסר מוצג בקוביה מקווקוות עם הסבר למה הוא חסר, ולא נעלם.
קוד להעתקה
אם הקוקפיט נבנה ב־HTML/CSS, אלה הטוקנים כמו שהם בדשבורד. מחליפים מצב עם data-theme="light" או data-theme="dark" על התגית <html>.
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Heebo:wght@300;400;500;600;700;800;900&display=swap">
:root{
--font: "Heebo", "Segoe UI", Arial, sans-serif;
--title: "Heebo", "Segoe UI", Arial, sans-serif;
--num: "Bebas Neue", "Heebo", Impact, sans-serif;
--mono: "Bebas Neue", "Heebo", Impact, sans-serif;
--display: "Heebo", "Segoe UI", Arial, sans-serif;
--radius: 2px; --radius-sm: 2px;
--rail-w: 244px;
/* rail is black in both themes, like the guide's top bar */
--rail-bg: #111111; --rail-ink: #f3efe6; --rail-muted: #8b867c; --rail-line: #2a2a2a;
--g: #b48a3c; --g-hi: #d6b46e; --g-deep: #86622a;
--st-good: #2d7a4f; --st-warning: #d64541; --st-critical: #8f1d17;
}
:root[data-theme="light"]{
color-scheme: light;
--page: #f6f2ea; --surface: #ffffff; --surface-2: #faf7f1; --surface-3: #ede5d6;
--line: #e2dacb; --line-strong: #cfc3ad; --rule: #111111;
--ink: #111111; --ink-2: #3a3a3a; --muted: #6b665d;
--gold: #86622a; --gold-hi: #b48a3c; --gold-soft: rgba(180,138,60,.10); --gold-line: rgba(180,138,60,.55);
--good-ink: #2d7a4f; --warning-ink: #b3261e; --critical-ink: #8f1d17;
--good-soft: rgba(45,122,79,.10); --warning-soft: rgba(214,69,65,.10); --critical-soft: rgba(143,29,23,.14);
--grid: #ece5d6; --axis: #cfc3ad;
--shadow: none;
--s1:#b48a3c; --s2:#2b64a8; --s3:#d95926; --s4:#1baf7a; --s5:#7b47a3; --s6:#e87ba4; --s7:#008300; --s8:#e34948;
--other: #c9c0ad;
--f1:#c9a253; --f2:#b48a3c; --f3:#9a7432; --f4:#7d5c22; --f5:#5c4316;
--hero-bg: #111111; --hero-ink: #f3efe6; --hero-muted: #a9a398; --hero-num: #d6b46e;
}
:root[data-theme="dark"]{
color-scheme: dark;
--page: #0e0e0e; --surface: #161616; --surface-2: #1d1d1d; --surface-3: #262626;
--line: #2a2a2a; --line-strong: #3a3a3a; --rule: #3a3a3a;
--ink: #f3efe6; --ink-2: #c9c3b6; --muted: #8b867c;
--gold: #d6b46e; --gold-hi: #e3c88f; --gold-soft: rgba(214,180,110,.10); --gold-line: rgba(214,180,110,.45);
--good-ink: #4fb37a; --warning-ink: #ff7b72; --critical-ink: #ffa198;
--good-soft: rgba(45,122,79,.22); --warning-soft: rgba(229,83,75,.16); --critical-soft: rgba(201,60,55,.30);
--grid: #242424; --axis: #3a3a3a;
--shadow: none;
--s1:#b8892f; --s2:#3987e5; --s3:#d95926; --s4:#199e70; --s5:#9085e9; --s6:#d55181; --s7:#008300; --s8:#e66767;
--other: #5c5850;
--f1:#e9cf94; --f2:#d6b064; --f3:#b8892f; --f4:#93691c; --f5:#6e4e14;
--hero-bg: #1d1d1d; --hero-ink: #f3efe6; --hero-muted: #8b867c; --hero-num: #e3c88f;
}// colors are read from the CSS tokens of the active theme
const v = n => getComputedStyle(document.documentElement).getPropertyValue(n).trim();
Chart.defaults.font.family = v('--font');
Chart.defaults.color = v('--muted');
const base = {
maintainAspectRatio: false,
animation: { duration: 700, easing: 'easeOutQuart' },
plugins: {
legend: { position: 'bottom', rtl: true,
labels: { color: v('--ink-2'), usePointStyle: true, pointStyle: 'circle', boxWidth: 8, boxHeight: 8, padding: 14, font: { size: 12 } } },
tooltip: { rtl: true, textDirection: 'rtl', backgroundColor: v('--surface-2'), borderColor: v('--line-strong'), borderWidth: 1,
padding: 12, cornerRadius: 2, titleColor: v('--ink'), bodyColor: v('--ink-2'),
titleFont: { weight: '600', size: 12.5 }, bodyFont: { size: 12 }, boxPadding: 6, usePointStyle: true },
},
scales: {
x: { grid: { display: false }, ticks: { color: v('--ink-2'), font: { size: 11.5 } }, border: { display: false } },
y: { grid: { color: v('--grid'), drawTicks: false }, ticks: { color: v('--muted'), font: { size: 11.5 }, padding: 8 },
border: { display: false }, beginAtZero: true },
},
};
// bars: borderRadius: 2, borderSkipped: 'start', maxBarThickness: 24, borderWidth: 0
// doughnut: cutout: '58%', borderColor: v('--surface'), borderWidth: 2, hoverOffset: 4
// line: primary = --s1, borderWidth 2, fill 12% alpha, tension .35, point only on the last value
// compare = --other · target = --muted, borderWidth 1.5, borderDash [4, 4]