/* Al Heki app — RTL-first, matches the Arabic product. */
.alheki-booking,.alheki-panel,.alheki-tour{direction:rtl;font-family:inherit;max-width:1100px;margin:0 auto}
.alheki-loading{padding:40px;text-align:center;color:#777}
.alheki-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;
  background:#f6f7f8;border:1px solid #e3e5e8;border-radius:8px;padding:12px 16px;margin-bottom:16px}
.alheki-balance{font-weight:700}
.alheki-balance span{color:#0f6b5c}
.alheki-week{display:flex;flex-direction:column;gap:14px}
.alheki-day{background:#fff;border:1px solid #e3e5e8;border-radius:8px;overflow:hidden}
.alheki-day h4{margin:0;padding:10px 12px;background:#0f6b5c;color:#fff;font-size:14px}
.alheki-day h4 small{display:block;opacity:.8;font-weight:400}
.alheki-slots{padding:12px;display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
.alheki-slot{display:flex;flex-direction:column;gap:2px;background:#f6f7f8;border:1px solid #e3e5e8;
  border-radius:6px;padding:8px 10px;cursor:pointer;text-align:right;transition:.12s}
.alheki-slot:hover{border-color:#0f6b5c;background:#eef7f5}
.alheki-slot .t{font-weight:700;font-variant-numeric:tabular-nums}
.alheki-slot .who{font-size:12px;color:#555}
.alheki-slot[disabled]{opacity:.5;cursor:not-allowed}
.alheki-empty{padding:14px;color:#888;font-size:13px;text-align:center}
.alheki-btn{background:#0f6b5c;color:#fff;border:0;border-radius:6px;padding:10px 18px;cursor:pointer;font-weight:600}
.alheki-btn-ghost{background:transparent;border:1px solid #c9cdd2;border-radius:6px;padding:9px 16px;cursor:pointer}
.alheki-cards{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin:16px 0}
.alheki-card{background:#fff;border:1px solid #e3e5e8;border-radius:8px;padding:14px 16px}
.alheki-card .k{font-size:12px;color:#666}.alheki-card .v{font-size:26px;font-weight:700;margin-top:4px}
.alheki-table{width:100%;border-collapse:collapse;font-size:14px;background:#fff}
.alheki-table th{background:#f6f7f8;text-align:right;padding:9px 12px;font-size:12px;color:#555}
.alheki-table td{padding:9px 12px;border-top:1px solid #eee}
.alheki-status{display:inline-block;padding:4px 12px;border-radius:12px;font-weight:600;font-size:13px}
.alheki-status-signed{background:#dff3ec;color:#0f6b5c}
.alheki-status-pending{background:#fcf3e3;color:#8a6116}
.alheki-contract-body{max-height:420px;overflow-y:auto;border:1px solid #e3e5e8;border-radius:8px;padding:16px;background:#fff;margin:14px 0}
.alheki-sigpad{border:1px dashed #b9bfc5;border-radius:8px;background:#fff;touch-action:none;display:block;max-width:100%}
.alheki-sign label{display:block;margin:12px 0 4px;font-weight:600}
.alheki-sign input[type=text]{width:100%;max-width:340px;padding:8px;border:1px solid #c9cdd2;border-radius:6px}
.alheki-consent{font-weight:400!important;display:flex;gap:8px;align-items:flex-start;margin:14px 0}
.alheki-msg{margin-top:10px;font-weight:600}
.alheki-msg.ok{color:#0f6b5c}.alheki-msg.err{color:#b3261e}
.alheki-tour-step{background:#fff;border:1px solid #e3e5e8;border-radius:8px;padding:20px;min-height:220px}
.alheki-tour-nav{display:flex;gap:12px;align-items:center;justify-content:space-between;margin-top:14px}
.alheki-modal{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:9999}
.alheki-modal-box{background:#fff;border-radius:10px;padding:22px;max-width:420px;width:92%}
.alheki-sessions{margin-top:22px}
.alheki-prompt{background:#fff8e5;border:1px solid #f0dfae;border-radius:8px;padding:12px 14px;margin-bottom:14px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.alheki-stars-wrap{margin:10px 0}
.alheki-stars{display:flex;gap:4px;margin:0 0 4px}
/* Scoped under the modal and the radiogroup: the theme and Elementor style every <button>
   (padding, background, hover colour) with selectors that outrank a bare class. */
.alheki-modal .alheki-stars button.alheki-star{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;cursor:pointer;font-size:32px;line-height:1;color:#c9ced6;background:none;border-radius:8px;transition:transform .08s,color .08s}
.alheki-modal .alheki-stars button.alheki-star.is-on{color:#e0a800}
.alheki-modal .alheki-stars button.alheki-star:hover,.alheki-modal .alheki-stars button.alheki-star.is-hover{color:#f2c230;background:none;transform:scale(1.1)}
.alheki-modal .alheki-stars button.alheki-star:focus-visible{outline:2px solid #2563eb;outline-offset:1px}
.alheki-stars-label{font-size:14px;color:#6b7280;min-height:20px}
.alheki-stars-label.is-set{color:#1f2937;font-weight:600}
.alheki-rating-view{color:#e0a800;letter-spacing:2px;white-space:nowrap}
.alheki-rated{display:inline-flex;gap:6px;align-items:center;margin-inline-end:8px}
.alheki-field{display:block;margin:8px 0}
.alheki-field-label{display:block;font-weight:600;margin-bottom:2px}
.alheki-fb-view .alheki-fb-part{margin:10px 0}
.alheki-fb-view .alheki-fb-part p{margin:2px 0;white-space:pre-wrap}
tr.alheki-row-focus{outline:2px solid #2563eb;outline-offset:-2px;background:#eff6ff}
.alheki-comment{width:100%;min-height:80px;padding:8px;border:1px solid #c9cdd2;border-radius:6px;font-family:inherit;margin-bottom:10px}

/* ---------- notification centre (R7) ---------- */
.alheki-notifications .alheki-bar { align-items: center; }
.alheki-notifications h3 { margin: 0; display: flex; align-items: center; gap: .5rem; }
.alheki-badge {
  display: inline-block; min-width: 1.4em; padding: 0 .45em;
  background: #b32d2e; color: #fff; border-radius: 999px;
  font-size: .75rem; line-height: 1.5; text-align: center; font-weight: 700;
}
.alheki-notif-list { list-style: none; margin: .75rem 0 0; padding: 0; }
.alheki-notif {
  padding: .7rem .85rem; border: 1px solid #e3e6ea; border-radius: 8px;
  margin-bottom: .5rem; background: #fff;
}
.alheki-notif.is-unread { border-inline-start: 4px solid #2271b1; background: #f6fafd; cursor: pointer; }
.alheki-notif-body { margin: .25rem 0 0; color: #3c434a; }
.alheki-notif-body p { margin: .25rem 0; }
.alheki-notif-meta {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: .35rem; font-size: .8rem; color: #646970;
}
.alheki-notif-link { text-decoration: none; }

/* An empty tour section is only ever shown to an editor. */
.alheki-tour-step.is-empty { outline: 1px dashed #d63638; outline-offset: 4px; }

/* ---------- teacher details + contract gate ---------- */
.alheki-profile-form .alheki-field { margin-bottom: .75rem; }
.alheki-profile-form label { display: block; font-weight: 600; margin-bottom: .25rem; }
.alheki-profile-form input { width: 100%; max-width: 28rem; padding: .5rem .6rem; border: 1px solid #d7dae4; border-radius: 6px; }
.alheki-profile-form .is-missing input { border-color: #b32d2e; background: #fdf6f6; }
.alheki-gate {
  border: 1px dashed #c8a24a; background: #fdf8ec; border-radius: 8px;
  padding: 1rem 1.15rem; margin: .5rem 0 1rem;
}
.alheki-contract-body {
  max-height: 32rem; overflow-y: auto; border: 1px solid #e3e6ea;
  border-radius: 8px; padding: 1rem 1.25rem; background: #fff; line-height: 1.75;
}
.alheki-contract-body h2, .alheki-contract-body h3 { margin: 1.1rem 0 .4rem; }
.alheki-contract-body table { width: 100%; margin-top: 1.5rem; }
.alheki-contract-body td { border-top: 1px solid #e3e6ea; padding: .6rem; vertical-align: top; }
.alheki-signed { color: #1b6047; font-weight: 600; }
.alheki-warn { color: #7e5504; background: #f6ebd5; padding: .6rem .8rem; border-radius: 6px; }
.alheki-msg.ok { color: #1b6047; }
.alheki-msg.err { color: #b32d2e; }

/* ---------- visitor tour ----------
   RTL first: the product is Arabic, so the tour is laid out right-to-left and
   the LTR case is the override, not the default. */
.alheki-tour{--at-gap:1rem;max-width:56rem;margin:0 auto;padding:1rem;direction:rtl;text-align:right}
.alheki-tour-bar{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:1.25rem}
.alheki-tour-progress{flex:1 1 8rem;height:6px;border-radius:999px;background:rgba(0,0,0,.08);overflow:hidden}
.alheki-tour-progress-fill{display:block;height:100%;width:0;border-radius:999px;background:currentColor;
  transition:width .28s ease}
.alheki-tour-dots{display:flex;gap:.4rem}
.alheki-tour-dot{width:.6rem;height:.6rem;padding:0;border:0;border-radius:50%;cursor:pointer;
  background:rgba(0,0,0,.18);transition:transform .2s ease,background .2s ease}
.alheki-tour-dot.is-current{background:currentColor;transform:scale(1.35)}
.alheki-tour-skip{margin-inline-start:auto;border:0;background:none;cursor:pointer;
  font:inherit;font-size:.85rem;opacity:.7;text-decoration:underline}
.alheki-tour-skip:hover{opacity:1}

/* ---------- tour navigation, hardened ----------
   The dots are <button>s, and the theme paints every button on the site as a
   wide filled pill. A single class could not outrank that, so on a phone the
   six dots became six 4rem slabs that overflowed the bar and were clipped at
   both edges — which is what QA photographed.

   Fixed by raising specificity rather than by shouting !important, and by
   letting the row wrap instead of overflowing. box-sizing matters: with the
   theme's padding still applied, a .6rem width is a .6rem CONTENT box and the
   dot is far wider than it claims. */
.alheki-tour .alheki-tour-bar{flex-wrap:wrap;max-width:100%}
.alheki-tour .alheki-tour-progress{min-width:0}
.alheki-tour .alheki-tour-dots{display:flex;flex-wrap:wrap;gap:.4rem;min-width:0;max-width:100%}
.alheki-tour .alheki-tour-dots .alheki-tour-dot{
  box-sizing:border-box;flex:0 0 auto;
  width:.6rem;height:.6rem;min-width:0;min-height:0;max-width:.6rem;
  margin:0;padding:0;border:0;border-radius:50%;
  font-size:0;line-height:0;box-shadow:none;
  background:rgba(0,0,0,.18);cursor:pointer;
  transition:transform .2s ease,background .2s ease}
.alheki-tour .alheki-tour-dots .alheki-tour-dot.is-current{background:currentColor;transform:scale(1.35)}
.alheki-tour .alheki-tour-skip{
  box-sizing:border-box;width:auto;min-width:0;padding:0;margin-inline-start:auto;
  border:0;background:none;box-shadow:none;
  font:inherit;font-size:.85rem;opacity:.7;text-decoration:underline;cursor:pointer}

@media (max-width:600px){
  /* The skip link goes to its own line, but as a LINK — not a full-width
     slab, which is how the theme's button styling rendered it. */
  .alheki-tour .alheki-tour-skip{flex-basis:100%;margin-inline-start:0;text-align:start}
  .alheki-tour .alheki-tour-dots{order:3;flex-basis:100%;justify-content:center}
}
.alheki-tour-step{animation:alheki-tour-in .28s ease both}
@keyframes alheki-tour-in{from{opacity:0;transform:translateY(.5rem)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){
  .alheki-tour-step{animation:none}
  .alheki-tour-progress-fill{transition:none}
}
.alheki-tour-eyebrow{margin:0 0 .35rem;font-size:.8rem;letter-spacing:.04em;opacity:.65}
.alheki-tour-title{margin:0 0 .35rem;font-size:clamp(1.25rem,1rem + 1.2vw,1.9rem);line-height:1.3}
.alheki-tour-sub{margin:0 0 1rem;opacity:.8}
.alheki-tour-media img{max-width:100%;height:auto;border-radius:.6rem}
.alheki-tour-video{position:relative;aspect-ratio:16/9;margin:0 0 1rem;border-radius:.6rem;overflow:hidden;
  background:rgba(0,0,0,.06)}
.alheki-tour-video iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.alheki-tour-body{margin-bottom:1rem}
.alheki-tour-note{font-size:.85rem;opacity:.75}
.alheki-tour-editor-note{padding:.6rem .8rem;border-radius:.5rem;background:rgba(0,0,0,.05)}

.alheki-tour-grid{display:grid;gap:var(--at-gap);
  grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));margin:0 0 1rem}
.alheki-tour-card{padding:.9rem 1rem;border-radius:.6rem;border:1px solid rgba(0,0,0,.1)}
.alheki-tour-card h4{margin:0 0 .5rem;font-size:1rem}
.alheki-tour-card ul{margin:0;padding-inline-start:1.1rem}
.alheki-tour-card li{margin-bottom:.25rem}
.alheki-tour-big{margin:.25rem 0;font-size:1.6rem;font-weight:700;line-height:1}

.alheki-tour-stages{display:grid;gap:.6rem;margin:0 0 1rem;padding-inline-start:1.2rem}
.alheki-tour-stages li strong{display:block}
.alheki-tour-stages li span{opacity:.8;font-size:.9rem}

.alheki-tour-cta{margin:1.25rem 0 0}
.alheki-tour-nav{display:flex;align-items:center;justify-content:space-between;gap:.75rem;
  margin-top:1.5rem;padding-top:1rem;border-top:1px solid rgba(0,0,0,.08)}
.alheki-tour-count{font-size:.9rem;opacity:.7;font-variant-numeric:tabular-nums}
.alheki-tour-nav button[disabled]{opacity:.4;cursor:not-allowed}
.alheki-tour-done{padding:1.5rem 0;text-align:center}

@media (max-width:640px){
  .alheki-tour{padding:.75rem}
  .alheki-tour-bar{gap:.5rem}
  .alheki-tour-skip{flex-basis:100%;margin-inline-start:0;text-align:start}
  .alheki-tour-grid{grid-template-columns:1fr}
  .alheki-tour-nav button{flex:1 1 auto}
}

/* ---------- public scholarship statistics ----------
   Counts only. There is no per-student markup here because the payload that
   feeds it has no per-student field. */
.alheki-stats{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));
  margin:1.5rem 0;direction:rtl;text-align:center}
.alheki-stat{padding:1.1rem .75rem;border-radius:.6rem;border:1px solid rgba(0,0,0,.1)}
.alheki-stat-n{display:block;font-size:clamp(1.6rem,1.2rem + 1.4vw,2.4rem);font-weight:700;line-height:1.1;
  font-variant-numeric:tabular-nums}
.alheki-stat-l{display:block;margin-top:.35rem;font-size:.85rem;opacity:.75}
.alheki-stat-countries{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;list-style:none;
  padding:0;margin:0 0 1.5rem;direction:rtl}
.alheki-stat-countries li{padding:.3rem .7rem;border-radius:999px;background:rgba(0,0,0,.05);font-size:.85rem}
@media (max-width:640px){.alheki-stats{grid-template-columns:repeat(2,1fr)}}

/* ---------- slide viewer ---------- */
.alheki-slides{direction:rtl;max-width:64rem;margin:0 auto}
.alheki-slide-stage{position:relative;line-height:0;border-radius:.5rem;overflow:hidden;
  border:1px solid rgba(0,0,0,.12);background:#fff}
.alheki-slide-img{width:100%;height:auto;display:block;
  /* a long-press "save image" is one tap on mobile; make it less inviting */
  -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;pointer-events:none}
.alheki-slide-canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;pointer-events:none}
.alheki-slide-nav{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:.75rem}
.alheki-slide-count{font-variant-numeric:tabular-nums;opacity:.75}
.alheki-slide-nav button[disabled]{opacity:.4;cursor:not-allowed}
.alheki-slide-tools{display:flex;align-items:center;gap:.5rem;margin-top:.5rem;flex-wrap:wrap}
.alheki-slide-tools .is-active{outline:2px solid currentColor;outline-offset:2px}
@media (max-width:640px){.alheki-slide-nav button{flex:1 1 auto}}

/* Course handouts. A plain list — the file name is the thing being scanned,
   so nothing competes with it, and the size sits quietly beside it because a
   student on mobile data has a right to know before tapping. */
.alheki-course-files-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.alheki-course-files-list li {
  display: flex;
  align-items: baseline;
  gap: .6rem;
  padding: .55rem 0;
  border-bottom: 1px solid rgba(0, 0, 0, .08);
}
.alheki-course-files-list li:last-child {
  border-bottom: 0;
}
.alheki-course-files-list a {
  text-decoration: none;
  font-weight: 600;
}
.alheki-course-files-list a:hover,
.alheki-course-files-list a:focus {
  text-decoration: underline;
}
.alheki-course-files-list small {
  opacity: .65;
  margin-inline-start: auto;
  white-space: nowrap;
}

/* ---------- contract signing ---------- */
.alheki-sign{margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid rgba(0,0,0,.12)}
.alheki-sign .alheki-field{margin:0 0 1rem}
.alheki-sign label{display:block;margin-bottom:.35rem;font-weight:600}
.alheki-sign input[type=text]{width:100%;max-width:32rem;box-sizing:border-box}
.alheki-sigpad{display:block;width:100%;max-width:32rem;height:auto;aspect-ratio:3/1;
  border:1px dashed rgba(0,0,0,.35);border-radius:.4rem;background:#fff;touch-action:none;cursor:crosshair}
.alheki-sign .alheki-consent label{display:flex;align-items:flex-start;gap:.5rem;font-weight:400}
.alheki-sign .alheki-consent input{margin-top:.2rem;flex:0 0 auto}

/* ---------- quiz submission notice ---------- */
.alheki-quiz-notice{position:fixed;inset-inline:1rem;bottom:1rem;z-index:9999;
  max-width:36rem;margin-inline:auto;padding:.9rem 1.1rem;border-radius:.5rem;
  background:#7a2e2e;color:#fff;font-size:.95rem;line-height:1.5;
  box-shadow:0 6px 24px rgba(0,0,0,.25)}

/* ---------- teacher: level interviews ----------
   One card per student waiting. The mark and the notes sit together because
   the rule is that neither is valid alone, and a layout that separates them
   invites saving one without the other. */
.alheki-assess-card{padding:1rem;margin:0 0 .9rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem}
.alheki-assess-who{font-weight:700;margin-bottom:.15rem}
.alheki-assess-theory{font-size:.9rem;opacity:.75;margin-bottom:.6rem}
.alheki-assess-form{display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-start}
.alheki-assess-form input[type=number]{width:9rem;box-sizing:border-box}
.alheki-assess-form textarea{flex:1 1 16rem;min-width:0;box-sizing:border-box}
.alheki-assess-form button{flex:0 0 auto}
.alheki-assess-form .alheki-msg{flex-basis:100%}
@media (max-width:600px){
  .alheki-assess-form input[type=number],
  .alheki-assess-form textarea,
  .alheki-assess-form button{flex-basis:100%;width:100%}
}

/* ---------- a student's level certificates ----------
   Print-friendly by construction: no shadows that waste toner, and the
   surrounding dashboard chrome is hidden when printing. */
.alheki-certificate{margin:0 0 1.25rem;padding:2rem 1.5rem;border:2px solid #1f3864;border-radius:.5rem;text-align:center}
.alheki-certificate-head{font-size:.95rem;letter-spacing:.08em;opacity:.7}
.alheki-certificate-name{margin:.6rem 0;font-size:clamp(1.4rem,1.1rem + 1.2vw,2rem);font-weight:700;color:#1f3864}
.alheki-certificate-body{font-size:1.05rem;line-height:1.9}
.alheki-certificate-foot{display:flex;justify-content:space-between;gap:1rem;
  margin-top:1.5rem;padding-top:.75rem;border-top:1px solid rgba(0,0,0,.15);font-size:.9rem;opacity:.8}
@media print{
  /* Only the certificates page prints this way. The rule used to be page-wide, which hid every other page
     (the teacher's contract printed as two blank sheets — PRINT-06). */
  body:has(.alheki-certificates) *{visibility:hidden}
  body:has(.alheki-certificates) .alheki-certificates,body:has(.alheki-certificates) .alheki-certificates *{visibility:visible}
  body:has(.alheki-certificates) .alheki-certificates{position:absolute;inset-inline:0;top:0}
  .alheki-certificates .description{display:none}
}

/* ---------- the teacher's contract, printed / saved as PDF (PRINT-06) ----------
   The contract text only: no dashboard menu, header, forms or buttons. Wrappers are put back to normal
   flow so the text paginates instead of being clipped to one grid row. */
@media print{
  @page{size:A4;margin:16mm 14mm}
  body:has(.alheki-contract){background:#fff !important;overflow:visible !important;height:auto !important}
  body:has(.alheki-contract) .tutor-dashboard-sidebar,
  body:has(.alheki-contract) .tutor-dashboard-header,
  body:has(.alheki-contract) .tutor-dashboard-nav-mobile,
  body:has(.alheki-contract) .tutor-modal,
  body:has(.alheki-contract) [class*="tutor-pn-"],
  body:has(.alheki-contract) [id^="tutor-pn-"],
  body:has(.alheki-contract) #wpadminbar,
  body:has(.alheki-contract) .bm-toasts-container,
  body:has(.alheki-contract) [id^="bm-mini-chats"],
  body:has(.alheki-contract) .alheki-noprint,
  body:has(.alheki-contract) .alheki-contract .alheki-sign,
  body:has(.alheki-contract) .alheki-contract .alheki-warn{display:none !important}
  body:has(.alheki-contract) .tutor-dashboard-layout,
  body:has(.alheki-contract) .tutor-dashboard-main,
  body:has(.alheki-contract) .tutor-dashboard-body,
  body:has(.alheki-contract) .tutor-dashboard-page{display:block !important;position:static !important;height:auto !important;
    min-height:0 !important;overflow:visible !important;margin:0 !important;padding:0 !important;width:auto !important;max-width:none !important;
    border:0 !important;box-shadow:none !important;background:#fff !important}
  .alheki-contract{display:block;position:static;height:auto;overflow:visible;border:0;box-shadow:none;padding:0;margin:0;color:#000;direction:rtl;text-align:right}
  .alheki-contract .alheki-contract-body{direction:rtl;text-align:right;font-size:12pt;line-height:1.9;color:#000;
    max-height:none !important;height:auto !important;overflow:visible !important;border:0;border-radius:0;padding:0;margin:0 0 1rem;background:#fff}
  .alheki-contract .alheki-contract-body p,.alheki-contract .alheki-contract-body li{orphans:3;widows:3}
  .alheki-contract .alheki-contract-body h1,.alheki-contract .alheki-contract-body h2,.alheki-contract .alheki-contract-body h3,
  .alheki-contract .alheki-contract-body h4{break-after:avoid;page-break-after:avoid}
  .alheki-contract .alheki-contract-body table{width:100%;border-collapse:collapse}
  .alheki-contract .alheki-contract-body tr,.alheki-contract .alheki-contract-body img{break-inside:avoid;page-break-inside:avoid}
  .alheki-contract .alheki-signed{break-inside:avoid;page-break-inside:avoid;margin-top:1.2rem;padding-top:.6rem;border-top:1px solid #000;color:#000}
}

/* ---------- overdue lessons awaiting a teacher's confirmation ---------- */
.alheki-overdue{margin:1rem 0;padding:1rem;border:1px solid #d6a800;border-radius:.5rem;background:#fffaf0}
.alheki-overdue h4{margin:0 0 .25rem}
.alheki-overdue-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;
  padding:.6rem 0;border-top:1px solid rgba(0,0,0,.1)}
.alheki-overdue-when{font-variant-numeric:tabular-nums;opacity:.8;font-size:.9rem}
.alheki-overdue-who{font-weight:600;margin-inline-end:auto}
.alheki-overdue-row .alheki-msg{flex-basis:100%}
@media (max-width:600px){
  .alheki-overdue-who{margin-inline-end:0;flex-basis:100%}
  .alheki-overdue-row button{flex:1 1 auto}
}

/* ---------- lessons awaiting the teacher's rating ---------- */
.alheki-rate-pending{margin:1rem 0;padding:1rem;border:1px solid rgba(0,0,0,.14);border-radius:.5rem}
.alheki-rate-pending h4{margin:0 0 .25rem}
.alheki-rate-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;
  padding:.55rem 0;border-top:1px solid rgba(0,0,0,.08)}
.alheki-rate-who{font-weight:600}
.alheki-rate-when{font-variant-numeric:tabular-nums;opacity:.75;font-size:.9rem;margin-inline-end:auto}
@media (max-width:600px){ .alheki-rate-when{margin-inline-end:0} .alheki-rate-row button{flex:1 1 auto} }

/* ---------- booking screen detail ---------- */
.alheki-teacher-filter{display:flex;align-items:center;gap:.5rem;margin:.5rem 0 1rem;flex-wrap:wrap}
.alheki-teacher-filter select{min-width:12rem;max-width:100%}
.alheki-slot .meta{display:block;font-size:.78rem;opacity:.7;margin-top:.15rem}
.alheki-slot .seats{display:block;font-size:.78rem;font-weight:600;color:#8a5a00;margin-top:.1rem}
.alheki-after-book{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem}
@media (max-width:600px){ .alheki-after-book > *{flex:1 1 100%;text-align:center} }

/* R1/R3 — the teacher's lesson history and its per-row actions. */
.alheki-teacher-lessons { margin-top: 1.5rem; }
.alheki-teacher-lessons h4 { margin: 0 0 .25rem; }
.alheki-tz-note { font-size: .82rem; opacity: .75; margin: 0 0 .6rem; }
.alheki-lesson-actions { white-space: nowrap; }
.alheki-lesson-actions .alheki-btn-ghost { margin-inline-end: .4rem; }
.alheki-rated { font-size: .82rem; opacity: .7; }
.alheki-bar .alheki-tz-note { margin: 0; }
/* R7 — the note that replaces Tutor's empty earnings graph. */
.alheki-ledger-note { font-size: .88rem; line-height: 1.7; opacity: .85; margin: 1rem 0 0; }
.alheki-ledger-note a { text-decoration: underline; }

/* ENH-02 — notifications and the entitlement, side by side at the top of My Lessons.
   Grid rather than flex: the two panels then share a row height without either
   one dictating it, and a single template change stacks them on a phone. */
.alheki-lessons-top {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  align-items: start;
  margin-bottom: 1rem;
}
.alheki-lessons-top > .alheki-panel { margin: 0; height: 100%; min-inline-size: 0; }
.alheki-balance-table { inline-size: 100%; }
/* Stacked well before a phone, because the space these two panels share is not
   the viewport: the Tutor dashboard keeps a 274px sidebar beside them, so a
   900px window leaves roughly 626px here while the entitlement panel alone
   cannot go below about 400px. Two columns then overflowed by 43px, and in RTL
   that surplus falls on the start side, pushing the page off the screen rather
   than merely widening it. 1100px is where both panels still fit honestly. */
@media (max-width: 1100px) {
  .alheki-lessons-top { grid-template-columns: 1fr; }
}

/* The remaining balance is the number a student comes to this page for, so it
   is the largest thing on the panel and the table below it is reference. */
.alheki-balance-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: .75rem;
  margin-bottom: .75rem;
  flex-wrap: wrap;
}
.alheki-balance-label { font-size: .95rem; opacity: .8; }
.alheki-balance-value { font-size: 2.4rem; line-height: 1.1; font-weight: 700; }
.alheki-balance-table { margin: 0; font-size: .88rem; }
.alheki-balance-table th { font-weight: 600; opacity: .75; }
@media (max-width: 600px) {
  .alheki-balance-value { font-size: 2rem; }
  .alheki-balance-table { font-size: .82rem; }
}

/* ===== ENH-01 — the booking screen =====================================
   Written with logical properties throughout (inline-start/end, text-align:
   start) so the same rules are correct in Arabic and in English. */

/* Toolbar: week navigation on one side, the two facts a student needs on the
   other. Sticky, because the timezone and the balance are what they check
   against while scrolling a long week. */
.alheki-booking-bar {
  position: sticky;
  top: 0;
  z-index: 3;
  background: #fff;
  border: 1px solid #e3e5e8;
  border-radius: 10px;
  padding: .7rem .9rem;
  margin-bottom: 1rem;
  box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
}
.alheki-booking-nav { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.alheki-booking-range { font-size: .9rem; opacity: .75; font-variant-numeric: tabular-nums; }
.alheki-booking-facts {
  display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
  font-size: .9rem;
}
.alheki-booking-facts .alheki-tz-note { margin: 0; opacity: .85; }
.alheki-booking-facts .alheki-balance { font-weight: 700; }

/* The teacher filter is how a student narrows a crowded week, so it sits
   directly under the toolbar and reads as a control, not as a caption. */
.alheki-teacher-filter {
  background: #f6f7f8;
  border: 1px solid #e3e5e8;
  border-radius: 10px;
  padding: .6rem .9rem;
  margin: 0 0 1rem;
}
.alheki-teacher-filter label { font-weight: 600; font-size: .9rem; }

/* A day is a full-width section with its own heading. */
.alheki-day { background: #fff; border: 1px solid #e3e5e8; border-radius: 10px; overflow: visible; }
.alheki-day-head {
  display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap;
  padding: .65rem .9rem;
  background: #0f6b5c; color: #fff;
  border-radius: 9px 9px 0 0;
}
.alheki-day-name { font-size: 1.05rem; font-weight: 700; }
.alheki-day-date { font-size: .85rem; opacity: .85; font-variant-numeric: tabular-nums; }
.alheki-day-count { font-size: .8rem; opacity: .8; margin-inline-start: auto; }

/* A slot card: time leads, teacher identifies, the rest is reference. Equal
   heights come from the grid, so no card dictates the row. */
.alheki-slot {
  /* min-width:0 lets the grid track shrink below the longest word it holds;
     without it an Arabic service name with no break opportunity widened the
     grid past the panel by 146px on a 1440px screen. */
  min-width: 0;
  display: flex; flex-direction: column; gap: .15rem;
  align-items: flex-start; text-align: start;
  background: #f6f7f8; border: 1px solid #e3e5e8; border-radius: 8px;
  padding: .6rem .7rem; cursor: pointer; width: 100%;
  transition: border-color .12s ease, background-color .12s ease, box-shadow .12s ease;
}
.alheki-slot .t { font-size: 1.15rem; font-weight: 700; line-height: 1.2; font-variant-numeric: tabular-nums; }
.alheki-slot .who { font-size: .88rem; color: #333; font-weight: 600; }
.alheki-slot .meta { font-size: .78rem; opacity: .65; margin: 0; }

/* Availability is a different kind of fact from time and teacher, so it is a
   pill rather than a fourth line of text competing with them. */
.alheki-slot .seats {
  display: inline-block; margin-top: .35rem;
  font-size: .72rem; font-weight: 600; line-height: 1.5;
  padding: .05rem .45rem; border-radius: 999px;
  background: #eef7f5; color: #0f6b5c; border: 1px solid #cde7e1;
}
.alheki-slot .seats.is-last { background: #fff4e5; color: #8a5a00; border-color: #f0d9b5; }

.alheki-slot:hover:not([disabled]) { border-color: #0f6b5c; background: #eef7f5; }
.alheki-slot:focus-visible { outline: 2px solid #0f6b5c; outline-offset: 2px; }
.alheki-slot.is-selected {
  border-color: #0f6b5c; background: #e3f2ee;
  box-shadow: inset 0 0 0 1px #0f6b5c;
}
/* Unavailable: visibly out of play, and it keeps its cursor and tooltip so the
   reason is reachable rather than merely implied by the grey. */
.alheki-slot[disabled], .alheki-slot.is-unavailable {
  opacity: .45; cursor: not-allowed; background: #f1f2f4;
}
.alheki-slot[disabled] .seats { opacity: .7; }

@media (max-width: 600px) {
  .alheki-booking-bar { position: static; }
  .alheki-slots { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: .5rem; padding: .6rem; }
  .alheki-slot { padding: .5rem .55rem; }
  .alheki-slot .t { font-size: 1.05rem; }
  .alheki-day-count { margin-inline-start: 0; }
}
/* Long names wrap inside the card rather than widening it. `anywhere` rather
   than `break-word` so a single long token also yields. */
.alheki-slot .who,
.alheki-slot .meta { overflow-wrap: anywhere; word-break: break-word; max-width: 100%; }
.alheki-slots { min-width: 0; }
.alheki-day { min-width: 0; }

/* ===== Round 7 =========================================================
   Two defects QA reproduced on production that the rules above did not
   prevent, because neither was about the widths this file was choosing. */

/* ENH-01 — the card text that shared a line.
   `overflow-wrap: anywhere` above could never take effect: the theme's button
   reset sets `white-space: nowrap`, and .alheki-slot is a <button>, so every
   span inherited it and no text had a wrap opportunity at all. The boxes stayed
   inside the card while the glyphs ran out of both sides and collided with the
   neighbouring card's text — which is why a box-intersection test found nothing
   and a screenshot found it immediately. `align-items: flex-start` compounded
   it by shrinking each line to fit-content (121px inside a 193px card), so the
   text overflowed a box narrower than the space available to it. */
.alheki-slot { white-space: normal; align-items: stretch; }
.alheki-slot > * { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; }
.alheki-slot .who,
.alheki-slot .meta { line-height: 1.45; }
/* The seat pill is sized by its content, not by the card, so it opts out of
   the stretch the other lines now take. */
.alheki-slot .seats { align-self: flex-start; }

/* ENH-02 — the 14px that pushed the page off the right edge.
   Tutor's two fixed dashboard panels (the mobile bottom nav and the notification
   off-canvas) resolve their full-bleed width against the layout viewport, which
   includes the 14px classic scrollbar gutter, while the visible content column
   is 14px narrower. That made documentElement.scrollWidth 407 against a 393
   viewport; the document is RTL, so the browser anchored the scroll at the right
   edge and every element in the content column sat 14px out of view — the
   greeting clipped, each notification card's right border cut off.
   Constraining the panels does not help: as fixed elements their containing
   block is that same 407px viewport. Giving the dashboard layout a horizontal
   clip makes it their containing block instead, so they size to the content
   column. Verified with both panels toggled open: each stays full width and
   full height, so this changes their geometry and not their behaviour.
   Scoped to the breakpoint where these panels exist, and it touches no vendor
   file — the rule lives here, the plugin is untouched. */
@media (max-width: 860px) {
  .tutor-dashboard-layout { overflow-x: clip; }
}


/* ===== REQ-01 — teacher weekly hours ===================================
   Logical properties throughout, as everywhere else here, so the same rules
   read correctly in Arabic and in English. */

.alheki-avail { border: 1px solid #e3e5e8; border-radius: 10px; padding: 1rem; margin-bottom: 1.25rem; }
.alheki-avail-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: .75rem; margin-bottom: .35rem; }
.alheki-avail-head h3 { margin: 0; font-size: 1.05rem; }
.alheki-avail-tz { font-size: .82rem; opacity: .7; }
.alheki-avail-governs { font-size: .85rem; opacity: .8; margin: 0 0 .25rem; }
.alheki-avail-hint { font-size: .85rem; opacity: .7; margin: 0 0 .9rem; }

/* A day is a row on a wide screen and a block on a narrow one. `start` rather
   than `left` keeps the toggle on the correct side in both directions. */
.alheki-avail-day {
  display: grid; grid-template-columns: 11rem 1fr; gap: .6rem;
  align-items: start; padding: .55rem 0; border-top: 1px solid #eef0f2;
}
.alheki-avail-day.is-off { opacity: .62; }
.alheki-avail-toggle { display: flex; align-items: center; gap: .5rem; cursor: pointer; }
.alheki-avail-dayname { font-weight: 600; }
.alheki-avail-slots { display: flex; flex-direction: column; gap: .4rem; min-inline-size: 0; }
.alheki-avail-slot { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; }
.alheki-avail-lbl { font-size: .82rem; opacity: .7; }
.alheki-avail-off { font-size: .85rem; opacity: .7; }

/* The theme's reset styles every text-like input as a full-width block
   (`input[type="time"] { width: 100% }`, specificity 0,1,1) and every button as
   a 35px-padded pill. A week of start and end times laid out that way ran to
   several screens and read as a form rather than a schedule, so these are the
   rules that win the cascade back: the selectors are deliberately longer than
   the reset's, and `width` is used rather than `inline-size` so it competes with
   the reset on the same property instead of losing to it. */
.alheki-avail .alheki-avail-slot input.alheki-avail-time {
  width: 8.5rem; min-width: 0; max-width: 100%;
  padding: .35rem .5rem; height: auto; font-size: .9rem;
}
.alheki-avail .alheki-avail-slot button,
.alheki-avail .alheki-avail-slots > button {
  display: inline-block; width: auto;
  padding: .3rem .8rem; font-size: .82rem; line-height: 1.6;
  border-radius: 6px; margin: 0;
  /* `.alheki-avail-slots` is a flex column, so its items stretch across it by
     default and `width: auto` cannot shrink them - the add button filled the
     row at 608px while reading as 70px of text. The cross-axis size is what
     needed changing, not the width. */
  align-self: flex-start;
}
.alheki-avail > button {
  display: inline-block; width: auto;
  padding: .5rem 1.4rem; margin-block-start: .9rem;
}

@media (max-width: 680px) {
  .alheki-avail-day { grid-template-columns: 1fr; }
  .alheki-avail .alheki-avail-slot input.alheki-avail-time { width: 7rem; }
}

/* The teacher's photograph on a booking card. Fixed box so a tall portrait and
   a wide one occupy the same space and the cards keep a common rhythm. */
.alheki-slot .who { display: flex; align-items: center; gap: .4rem; min-inline-size: 0; }
.alheki-slot-avatar {
  inline-size: 24px; block-size: 24px; border-radius: 50%;
  object-fit: cover; flex: 0 0 auto;
}
.alheki-slot .who-name { min-inline-size: 0; overflow-wrap: anywhere; }

/* Slots on a teacher's public profile. */
.alheki-teacher-slots { margin-block-start: 1.5rem; }
.alheki-teacher-slots h3 { margin-block: 0 .5rem; }
.alheki-teacher-slots .alheki-day { margin-block-end: .75rem; }


/* ===== REQ-02 — the teacher's content library ==========================
   Written against the theme's resets, which style every text input as a
   full-width block and every button as a padded pill: selectors are longer
   than the reset's so they win, and they set `width` rather than `inline-size`
   so they compete on the same property. Logical properties throughout. */

.alheki-lib-head { display: flex; flex-wrap: wrap; align-items: center; gap: .6rem; margin-block-end: 1rem; }
.alheki-lib-head h3 { margin: 0; margin-inline-end: auto; font-size: 1.15rem; }
.alheki-panel .alheki-lib-head input.alheki-lib-search { width: min(22rem, 100%); padding: .45rem .7rem; height: auto; }
.alheki-panel .alheki-lib-head select.alheki-lib-level { width: auto; max-width: 100%; padding: .45rem .7rem; height: auto; }

.alheki-lib-viewer:empty { display: none; }
.alheki-lib-viewer-box { border: 1px solid #cfd4d9; border-radius: 10px; padding: .8rem; margin-block-end: 1.2rem; background: #fff; }
.alheki-deck-head { display: flex; align-items: center; justify-content: space-between; gap: .6rem; margin-block-end: .6rem; }
.alheki-deck-head strong { min-inline-size: 0; overflow-wrap: anywhere; }
.alheki-lib-note { font-size: .85rem; opacity: .75; margin: 0 0 .6rem; }

.alheki-lib-level-sec { margin-block-end: 1.4rem; }
.alheki-lib-level-sec > h4 { margin: 0 0 .5rem; padding-block-end: .3rem; border-block-end: 2px solid #0f6b5c; }
.alheki-lib-course { margin-block-end: .9rem; }
.alheki-lib-course > h5 { margin: 0 0 .35rem; font-size: .95rem; opacity: .85; }
.alheki-lib-decks { list-style: none; margin: 0; padding: 0; display: grid; gap: .5rem; }
.alheki-lib-deck {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .5rem .8rem;
  border: 1px solid #e3e5e8; border-radius: 8px; padding: .6rem .8rem; background: #f9fafb;
}
.alheki-lib-deck-info { display: flex; flex-direction: column; gap: .15rem; min-inline-size: 0; flex: 1 1 14rem; }
.alheki-lib-deck-info strong { overflow-wrap: anywhere; }
.alheki-lib-meta { font-size: .82rem; opacity: .7; overflow-wrap: anywhere; }
.alheki-lib-actions { display: flex; flex-wrap: wrap; gap: .4rem; }
.alheki-lib-choose { flex: 1 1 100%; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; padding-block-start: .4rem; border-block-start: 1px dashed #d5d9de; }
.alheki-panel .alheki-lib-choose select { width: auto; max-width: 100%; padding: .35rem .6rem; height: auto; }

.alheki-panel .alheki-lib-deck button,
.alheki-panel .alheki-lib-chip button,
.alheki-panel .alheki-lib-viewer-box .alheki-deck-head button,
.alheki-panel .alheki-lib-choose button {
  display: inline-block; width: auto; padding: .3rem .8rem; font-size: .85rem; line-height: 1.6; border-radius: 6px; margin: 0;
}

.alheki-lib-sessions { margin-block-start: 1.6rem; }
.alheki-lib-sessions > h4 { margin: 0 0 .5rem; }
.alheki-lib-session { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .8rem; padding: .55rem .2rem; border-block-end: 1px solid #eef0f2; }
.alheki-lib-session.is-focus { background: #eef7f5; border-radius: 8px; padding-inline: .6rem; }
.alheki-lib-session-who { font-weight: 600; min-inline-size: 0; overflow-wrap: anywhere; }
.alheki-lib-chips { display: flex; flex-wrap: wrap; gap: .4rem; }
.alheki-lib-chip { display: inline-flex; gap: .15rem; }
.alheki-panel .alheki-lib-chip .alheki-lib-remove { padding-inline: .5rem; }

/* A viewer opened in a lesson list takes a full row of the table. */
.alheki-deck-row > td { padding: .8rem; background: #fff; }
.alheki-pick-deck, .alheki-deck-open { display: inline-block; text-decoration: none; margin-inline-end: .3rem; }

@media (max-width: 680px) {
  .alheki-panel .alheki-lib-head input.alheki-lib-search { width: 100%; }
  .alheki-lib-actions { inline-size: 100%; }
}


/* ===== REQ-02 — linked / unlinked tabs and the link form ================= */
.alheki-lib-tabs { display: flex; flex-wrap: wrap; gap: .4rem; margin-block-end: 1rem; border-block-end: 1px solid #e3e5e8; }
.alheki-panel .alheki-lib-tabs button.alheki-lib-tab {
  display: inline-block; width: auto; margin: 0; padding: .45rem 1.1rem; font-size: .92rem; line-height: 1.5;
  background: transparent; color: inherit; border: 0; border-block-end: 3px solid transparent; border-radius: 6px 6px 0 0;
}
.alheki-panel .alheki-lib-tabs button.alheki-lib-tab.is-active { border-block-end-color: #0f6b5c; font-weight: 700; background: #eef7f5; }

.alheki-lib-status { display: inline-block; align-self: flex-start; font-size: .78rem; padding: .05rem .55rem; border-radius: 999px; background: #fff4e5; color: #8a5a00; border: 1px solid #f0d9b5; }
.alheki-lib-status.is-failed { background: #fdecec; color: #a12727; border-color: #f2c4c4; }
.alheki-lib-status.is-unconverted { background: #eef0f3; color: #4a5260; border-color: #d5d9de; }

.alheki-lib-linkform, .alheki-lib-choose { flex: 1 1 100%; display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; padding-block-start: .5rem; border-block-start: 1px dashed #d5d9de; }
.alheki-panel .alheki-lib-linkform select { width: auto; min-width: 11rem; max-width: 100%; padding: .35rem .6rem; height: auto; }
.alheki-panel .alheki-lib-linkform button { display: inline-block; width: auto; padding: .3rem .9rem; font-size: .85rem; line-height: 1.6; border-radius: 6px; margin: 0; }

/* ---------- tour: restart control, tappable dots, dashboard entry card ----------
   The dots keep their small visible circle, but the BUTTON is 28px so a thumb can hit it:
   the circle is drawn by ::before. Specificity matches the hardened rules above. */
.alheki-tour .alheki-tour-dots{gap:.15rem}
.alheki-tour .alheki-tour-dots .alheki-tour-dot{
  position:relative;width:28px;height:28px;max-width:none;min-width:28px;min-height:28px;
  background:none;border-radius:50%;transform:none}
.alheki-tour .alheki-tour-dots .alheki-tour-dot::before{
  content:"";position:absolute;inset:0;margin:auto;width:.6rem;height:.6rem;border-radius:50%;
  background:rgba(0,0,0,.18);transition:transform .2s ease,background .2s ease}
.alheki-tour .alheki-tour-dots .alheki-tour-dot.is-current{background:none;transform:none}
.alheki-tour .alheki-tour-dots .alheki-tour-dot.is-current::before{background:currentColor;transform:scale(1.35)}
.alheki-tour .alheki-tour-dots .alheki-tour-dot:focus-visible{outline:2px solid currentColor;outline-offset:1px}
.alheki-tour .alheki-tour-actions{display:flex;align-items:center;gap:1rem;margin-inline-start:auto}
.alheki-tour .alheki-tour-actions button{
  box-sizing:border-box;width:auto;min-width:0;min-height:32px;padding:.25rem .4rem;margin:0;
  border:0;background:none;box-shadow:none;font:inherit;font-size:.85rem;opacity:.8;
  text-decoration:underline;cursor:pointer;color:inherit}
.alheki-tour .alheki-tour-actions button:hover,.alheki-tour .alheki-tour-actions button:focus-visible{opacity:1}
.alheki-tour .alheki-tour-actions .alheki-tour-skip{margin:0;flex-basis:auto}
@media (max-width:600px){
  .alheki-tour .alheki-tour-actions{flex-basis:100%;margin-inline-start:0;justify-content:space-between}
  .alheki-tour .alheki-tour-actions .alheki-tour-skip{flex-basis:auto;text-align:end}
}
.alheki-tour-entry{direction:rtl;text-align:right;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;
  max-width:1100px;margin:1rem auto;padding:1rem 1.25rem;border:1px solid rgba(0,0,0,.12);border-radius:.75rem;background:#fff}
.alheki-tour-entry-text{flex:1 1 18rem;min-width:0}
.alheki-tour-entry h3{margin:0 0 .25rem;font-size:1.1rem}
.alheki-tour-entry p{margin:0;font-size:.95rem;opacity:.85}
.alheki-tour-entry .alheki-btn{flex:0 0 auto}
@media (max-width:600px){.alheki-tour-entry .alheki-btn{flex:1 1 100%;text-align:center}}

/* ---------- teacher earnings: payment state per entry (white on dark: readable on any row) ---------- */
.alheki-pay-badge{display:inline-block;padding:2px 10px;border-radius:999px;color:#fff;font-size:.8rem;font-weight:600;white-space:nowrap}
.alheki-pay-badge.is-unpaid{background:#8a2c0d}
.alheki-pay-badge.is-pending{background:#8a5a00}
.alheki-pay-badge.is-paid{background:#1d6b34}

/* ---------- REQ-08: level path (lessons -> theory -> interview -> certificate) and certificate actions ---------- */
.alheki-path{margin:0 0 1.5rem}
.alheki-path-level{border:1px solid rgba(0,0,0,.12);border-radius:.7rem;padding:.9rem 1rem;margin:.6rem 0;background:#fff}
.alheki-path-level h4{margin:0 0 .5rem;font-size:1.05rem}
.alheki-path-level.is-unconfigured{background:#f6f6f6;color:#555}
.alheki-path-step{display:grid;grid-template-columns:9rem 1fr;gap:.2rem .8rem;align-items:center;padding:.35rem 0;border-top:1px dashed rgba(0,0,0,.1)}
.alheki-path-step:first-of-type{border-top:0}
.alheki-path-k{font-weight:700}
.alheki-path-step.is-done .alheki-path-k::before{content:"✓ ";color:#1d6b34}
.alheki-path-bar{grid-column:1 / -1;display:block;height:8px;border-radius:6px;background:rgba(0,0,0,.1);overflow:hidden}
.alheki-path-bar i{display:block;height:100%;background:#8a6d00}
.alheki-certificate-actions{display:flex;flex-wrap:wrap;gap:.6rem;justify-content:center;margin-top:1rem}
@media (max-width:600px){.alheki-path-step{grid-template-columns:1fr}.alheki-certificate-actions a{flex:1 1 100%;text-align:center}}

/* ======================================================================================================================
   REQ-01 repair (2026-10-14): lesson-type tabs, day/time/teacher filters, readable booking cards.
   Scoped to the booking screen and the teacher availability screen only.
   ====================================================================================================================== */
[data-alheki-booking] .alheki-kind-tabs { display: flex; gap: .5rem; flex-wrap: wrap; margin: .75rem 0 .5rem; }
[data-alheki-booking] .alheki-kind-tab {
  min-height: 44px; padding: .55rem 1.1rem; border-radius: 999px; border: 1.5px solid #0f6b5c; background: #fff; color: #0b4f44;
  font: inherit; font-weight: 700; cursor: pointer; line-height: 1.2;
}
[data-alheki-booking] .alheki-kind-tab.is-active { background: #0f6b5c; color: #fff; }
[data-alheki-booking] .alheki-kind-tab:focus-visible { outline: 3px solid #0f6b5c; outline-offset: 2px; }
[data-alheki-booking] .alheki-filters { display: flex; flex-wrap: wrap; gap: .75rem 1rem; align-items: flex-end; margin: .25rem 0 .5rem; padding: .75rem; background: #f3f6f5; border: 1px solid #d5dfdc; border-radius: 10px; }
[data-alheki-booking] .alheki-filter { display: flex; flex-direction: column; gap: .25rem; min-width: 9rem; flex: 1 1 9rem; }
[data-alheki-booking] .alheki-filter label { font-weight: 700; font-size: .9rem; color: #1b2733; }
[data-alheki-booking] .alheki-filter select, [data-alheki-booking] .alheki-filter input { min-height: 44px; max-width: 100%; padding: .35rem .6rem; border: 1px solid #8a9aa0; border-radius: 8px; background: #fff; color: #1b2733; font: inherit; }
[data-alheki-booking] .alheki-filter-reset { min-height: 44px; padding: .5rem 1rem; border: 1.5px solid #5b6b72; border-radius: 8px; background: #fff; color: #1b2733; font: inherit; font-weight: 700; cursor: pointer; }
[data-alheki-booking] .alheki-filter-reset[disabled] { opacity: .55; cursor: not-allowed; }
[data-alheki-booking] .alheki-filter-count { margin: .25rem 0 .75rem; font-weight: 600; color: #1b2733; }

/* Booking cards: the secondary lines were 65% opacity grey on pale grey. Solid, darker text with a white card. */
[data-alheki-booking] .alheki-slot { background: #fff; color: #1b2733; border: 1.5px solid #9fb0b5; }
[data-alheki-booking] .alheki-slot .t { color: #0b3b34; }
[data-alheki-booking] .alheki-slot .who, [data-alheki-booking] .alheki-slot .who-name { color: #1b2733; }
[data-alheki-booking] .alheki-slot .meta { color: #3b4a52; opacity: 1; font-size: .85rem; }
[data-alheki-booking] .alheki-slot .seats { color: #5a3a00; background: #fff4e5; border-color: #e0b878; }
[data-alheki-booking] .alheki-day-head { color: #fff; }
[data-alheki-booking] .alheki-day-date, [data-alheki-booking] .alheki-day-count { opacity: 1; }
[data-alheki-booking] .alheki-empty { color: #1b2733; }

/* Teacher availability screen: the clock note, the own-schedule note, and the refusal beside the Save button. */
[data-alheki-availability] .alheki-avail-tz { font-weight: 700; color: #0b4f44; margin: .25rem 0 .75rem; }
[data-alheki-availability] .alheki-avail-own { padding: .6rem .8rem; background: #fff4e5; border: 1px solid #e0b878; border-radius: 8px; color: #5a3a00; }
[data-alheki-availability] .alheki-msg.err { margin: .75rem 0; padding: .75rem 1rem; border: 1.5px solid #a32020; background: #fdecec; color: #7a1010; border-radius: 8px; font-weight: 600; }
[data-alheki-availability] .alheki-msg.ok { margin: .75rem 0; padding: .75rem 1rem; border: 1.5px solid #0f6b5c; background: #e8f5f1; color: #0b4f44; border-radius: 8px; font-weight: 600; }

/* REQ-03 repair (2026-10-14): rating in the lesson rows — larger stars plus the number, direction named in the label. */
.alheki-rating-view { display: inline-flex; align-items: center; gap: .4rem; white-space: nowrap; }
.alheki-rating-view .alheki-rating-stars { font-size: 1.5rem; line-height: 1; color: #c98f00; letter-spacing: 2px; }
.alheki-rating-view .alheki-rating-num { font-size: .95rem; font-weight: 700; color: #1b2733; }
.alheki-rated { display: inline-flex; align-items: center; gap: .35rem; flex-wrap: wrap; font-weight: 600; color: #1b2733; }
.alheki-modal .alheki-stars button.alheki-star { width: 52px; height: 52px; font-size: 2.1rem; }
.alheki-modal .alheki-stars-label, .alheki-modal .alheki-stars-wrap output { font-size: 1.05rem; font-weight: 700; color: #1b2733; }

/* ======================================================================================================================
   REQ-08 (2026-10-14): "My certificates" page, after the client-approved reference #7.
   Progress panel: level title with ornaments, then one row per step (check, icon, label, value, bar).
   Certificate card: completion sentence, the certificate itself as a preview, view / download / print, issue date.
   ====================================================================================================================== */
.alheki-certificates { font-family: inherit; color: #1b2733; }
.alheki-certificates > h3, .alheki-path > h3 { margin: 1.25rem 0 .75rem; font-size: 1.35rem; color: #12306b; }
.alheki-path-level { padding: 0; overflow: hidden; border: 1px solid #dfe5ef; border-radius: 14px; box-shadow: 0 2px 10px rgba(18, 48, 107, .06); background: #fff; }
.alheki-path-level .alheki-path-title { margin: 0; padding: .8rem 1rem; text-align: center; font-size: 1.25rem; font-weight: 700; color: #12306b; background: #fdf4e3; }
.alheki-path-level .alheki-orn { color: #c9a24b; margin-inline: .5rem; font-size: 1.1rem; }
.alheki-path-level .alheki-path-step {
  display: grid; grid-template-columns: 2rem 2.9rem 8.5rem minmax(9rem, 14rem) 1fr; align-items: center; gap: .5rem .75rem;
  padding: .9rem 1.1rem; border-top: 1px solid #eef1f6; border-top-style: solid;
}
.alheki-path-level .alheki-path-step.is-theory, .alheki-path-level .alheki-path-step.is-interview { padding-top: 1.6rem; }
.alheki-path-level .alheki-path-step.is-done .alheki-path-k::before { content: none; }
.alheki-path-check { width: 1.8rem; height: 1.8rem; border-radius: 50%; border: 2px solid #c9d1dc; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; color: #1d7a41; background: #fff; }
.alheki-path-check.is-on { border-color: #2e9d57; background: #e5f6ea; }
.alheki-path-ico { width: 2.6rem; height: 2.6rem; border-radius: 10px; background: #eef3fb; color: #1f4a9b; display: inline-flex; align-items: center; justify-content: center; }
.alheki-path-level .alheki-path-k { font-weight: 700; font-size: 1.05rem; color: #12306b; }
.alheki-path-level .alheki-path-v { color: #2b3a47; font-size: .98rem; }
.alheki-path-level .alheki-path-bar { grid-column: auto; position: relative; display: block; height: 6px; border-radius: 6px; background: #e5e9f0; overflow: visible; min-width: 7rem; }
.alheki-path-level .alheki-path-bar i { display: block; height: 100%; border-radius: 6px; background: #b8860b; }
.alheki-path-level .alheki-path-bar.is-exam i { background: #2f66c9; }
.alheki-path-level .alheki-path-bar.is-exam.is-fail i { background: #c27a00; }
.alheki-path-level .alheki-path-bar.is-empty { background: #eef0f4; }
.alheki-path-mark { position: absolute; top: -1.55rem; transform: translateX(50%); font-size: .85rem; font-weight: 700; color: #12306b; white-space: nowrap; }
.alheki-path-mark::after { content: ""; position: absolute; top: 1.15rem; inset-inline-start: 50%; margin-inline-start: -4px; border: 4px solid transparent; border-top-color: #12306b; border-bottom: 0; }
.alheki-path-step.is-cert .alheki-path-v { grid-column: span 2; }
.alheki-path-level .alheki-btn { margin: .75rem 1.1rem 1rem; }

/* START-BUTTON-08 — «ابدأ اختبار المستوى»: the site's navy, white text, at the far left (end) of the path table's footer in RTL.
   No change to where it links or when it shows. */
.alheki-path-level .alheki-path-foot { display: flex; justify-content: flex-end; margin: 0; padding: .9rem 1.1rem 1.1rem; border-top: 1px solid #e3e8f0; }
.alheki-path-level .alheki-btn.alheki-path-start { margin: 0; display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: .55rem 1.5rem;
  border: 2px solid #12306b; border-radius: 10px; background: #12306b !important; color: #fff !important; font-weight: 700; font-size: 1rem; line-height: 1.2; text-decoration: none; box-shadow: 0 1px 2px rgba(18, 48, 107, .25); transition: background-color .15s, transform .05s; }
.alheki-path-level .alheki-btn.alheki-path-start:hover { background: #0c2150 !important; border-color: #0c2150; color: #fff !important; }
.alheki-path-level .alheki-btn.alheki-path-start:focus-visible { outline: 3px solid #b8860b; outline-offset: 2px; color: #fff !important; }
.alheki-path-level .alheki-btn.alheki-path-start:active { background: #08183b !important; transform: translateY(1px); box-shadow: none; }
.alheki-path-level .alheki-btn.alheki-path-start[aria-disabled="true"], .alheki-path-level .alheki-btn.alheki-path-start.is-disabled { background: #c5cddb !important; border-color: #c5cddb; color: #4a5866 !important; cursor: not-allowed; pointer-events: none; box-shadow: none; }
@media (max-width: 600px) { .alheki-path-level .alheki-path-foot { justify-content: stretch; } .alheki-path-level .alheki-btn.alheki-path-start { flex: 1 1 100%; } }

.alheki-certificate { margin: 0 0 1.25rem; padding: 1rem 1.1rem 1.1rem; border: 1.5px solid #cdd8ea; border-radius: 14px; text-align: center; background: #fff; box-shadow: 0 2px 10px rgba(18, 48, 107, .06); }
.alheki-certificate-lead { margin: 0 0 .85rem; font-size: 1.05rem; color: #12306b; line-height: 1.8; }
.alheki-certificate-frame { display: flex; justify-content: center; padding: .85rem; background: #f6f8fc; border-radius: 10px; }
.alheki-certificate-preview { display: block; max-width: min(100%, 640px); width: 100%; height: auto; border-radius: 6px; box-shadow: 0 6px 24px rgba(15, 35, 80, .2); background: #fffaf0; }
.alheki-certificate-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .75rem 1rem; margin-top: 1rem; }
.alheki-certificate .alheki-certificate-actions { display: flex; flex-wrap: wrap; gap: .6rem; justify-content: flex-start; margin: 0; }
.alheki-certificate-actions a { display: inline-flex; align-items: center; gap: .4rem; min-height: 44px; padding: .5rem 1.1rem; border-radius: 8px; font-weight: 700; text-decoration: none; }
.alheki-certificate-actions a.alheki-cert-view { background: #8f6400; color: #fff; border: 1.5px solid #8f6400; }
.alheki-certificate-actions a.alheki-cert-download, .alheki-certificate-actions a.alheki-cert-print { background: #fff; color: #12306b; border: 1.5px solid #9fb0c8; }
.alheki-certificate-actions a:focus-visible { outline: 3px solid #12306b; outline-offset: 2px; }
.alheki-certificate-date { color: #3b4a52; font-size: .95rem; font-weight: 600; }
.alheki-certificate .screen-reader-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

@media (max-width: 640px) {
  .alheki-path-level .alheki-path-step { grid-template-columns: 2rem 2.6rem 1fr; padding: .85rem .9rem; }
  .alheki-path-level .alheki-path-step.is-theory, .alheki-path-level .alheki-path-step.is-interview { padding-top: 1.1rem; }
  .alheki-path-level .alheki-path-step .alheki-path-v, .alheki-path-step.is-cert .alheki-path-v { grid-column: 1 / -1; }
  .alheki-path-level .alheki-path-bar { grid-column: 1 / -1; margin-top: 1.4rem; }
  .alheki-certificate-bar { justify-content: center; }
  .alheki-certificate .alheki-certificate-actions { justify-content: center; width: 100%; }
  .alheki-certificate-actions a { flex: 1 1 30%; justify-content: center; }
}
/* inline SVG glyphs (no dependence on a device's emoji/symbol fonts) */
.alheki-path-check .alheki-path-tick { width: 1rem; height: 1rem; }
.alheki-path-level .alheki-orn { width: 1rem; height: 1rem; vertical-align: -2px; }
.alheki-certificate-actions a svg { flex: 0 0 auto; }

/* --- tour, step 4 (packages): one readable row per tier instead of a pink link that mixes right-to-left words with a left-to-right price --- */
.alheki-tour .alheki-tour-packages { display: grid; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); gap: 1rem; }
.alheki-tour .alheki-tour-packages .alheki-tour-card { padding: .9rem 1rem; border: 1px solid #d5dfef; border-radius: 12px; background: #fff; }
.alheki-tour .alheki-tour-packages .alheki-tour-card h4 { margin: 0 0 .6rem; padding-block-end: .5rem; border-block-end: 2px solid #c9a24b; color: #12306b; font-size: 1.1rem; }
.alheki-tour .alheki-tour-packages ul { list-style: none; margin: 0; padding: 0; }
.alheki-tour .alheki-tour-packages li + li { border-block-start: 1px solid #edf0f5; }
.alheki-tour .alheki-tour-packages li a, .alheki-tour .alheki-tour-packages li a:visited { display: grid; grid-template-columns: 1fr auto auto; gap: .5rem; align-items: baseline; padding: .55rem .15rem; color: #12306b; text-decoration: none; font-size: .98rem; line-height: 1.5; }
.alheki-tour .alheki-tour-packages li a:hover, .alheki-tour .alheki-tour-packages li a:focus-visible { background: #f3f6fc; border-radius: 8px; }
.alheki-tour .alheki-tour-packages li a:focus-visible { outline: 3px solid #12306b; outline-offset: 1px; }
.alheki-tour .alheki-tier-name { font-weight: 700; color: #12306b; }
.alheki-tour .alheki-tier-sessions { color: #3b4a52; white-space: nowrap; }
.alheki-tour .alheki-tier-price { font-weight: 700; color: #7a5200; white-space: nowrap; text-align: end; min-inline-size: 5.5rem; }
@media (max-width: 520px) { .alheki-tour .alheki-tour-packages { grid-template-columns: 1fr; } .alheki-tour .alheki-tour-packages li a { grid-template-columns: 1fr auto; } .alheki-tour .alheki-tier-sessions { grid-column: 1; font-size: .9rem; } .alheki-tour .alheki-tier-price { grid-column: 2; grid-row: 1 / span 2; align-self: center; } }

/* Q-04: the teacher's student-facing number and the profile header */
.alheki-slot .who-contact{display:block;font-size:.85em;opacity:.8;direction:ltr;unicode-bidi:plaintext}
.alheki-teacher-head{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin-bottom:.75rem}
.alheki-teacher-head .who-contact{direction:ltr;unicode-bidi:plaintext;opacity:.85}
.alheki-note{margin:.5rem 0;font-size:.95em}

/* Q-07: «تقييماتي» — two independent cards */
.alheki-rating-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:1rem}
.alheki-rating-card{border:1px solid rgba(0,0,0,.12);border-radius:12px;padding:1rem 1.1rem;background:#fff}
.alheki-rating-card h3{margin:0 0 .15rem;font-size:1.15rem}
.alheki-rating-hint{margin:0 0 .75rem;opacity:.7;font-size:.9em}
.alheki-rating-big{display:flex;align-items:baseline;gap:.4rem;flex-wrap:wrap}
.alheki-rating-big .avg{font-size:2.4rem;line-height:1}
.alheki-avgstars{position:relative;display:inline-block;font-size:1.5rem;letter-spacing:2px;direction:ltr;line-height:1}
.alheki-avgstars .bg{color:#d5d5d5}
.alheki-avgstars .fg{position:absolute;inset-inline-start:0;top:0;overflow:hidden;white-space:nowrap;color:#f5a623}
html[dir=rtl] .alheki-avgstars .fg{left:0;right:auto}
.alheki-rating-count{margin:.5rem 0}
.alheki-rating-details summary{cursor:pointer;min-height:44px;display:flex;align-items:center;font-weight:600}
.alheki-rating-list{list-style:none;margin:.5rem 0 0;padding:0;display:grid;gap:.6rem}
.alheki-rating-list li{border-top:1px solid rgba(0,0,0,.08);padding-top:.5rem;display:flex;flex-wrap:wrap;gap:.2rem .6rem}
.alheki-rating-list .stars{color:#f5a623;letter-spacing:1px;direction:ltr}
.alheki-rating-list .src,.alheki-rating-list .by,.alheki-rating-list time{opacity:.75;font-size:.9em}
.alheki-rating-list .note{flex-basis:100%;margin:.15rem 0 0}

/* ======================================================================================================================
   REQ-01 retest (2026-10-20) — REF-01 booking screen, REF-02 confirmation. Layout only; same data, same engine.
   ====================================================================================================================== */
[data-alheki-booking]{--bk-ink:#14212b;--bk-muted:#4a5a66;--bk-line:#d5dedb;--bk-green:#0f6b5c;--bk-green-d:#0a5448;--bk-soft:#eef6f4;--bk-amber:#7a4b00;--bk-amber-bg:#fff3dc}
/* toolbar: week navigation on one line, never overlapping */
[data-alheki-booking] .alheki-booking-bar{position:static;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.6rem 1rem;padding:.75rem 1rem;background:#fff;border:1px solid var(--bk-line);border-radius:12px;margin-bottom:.75rem}
[data-alheki-booking] .alheki-booking-nav{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
[data-alheki-booking] .alheki-booking-nav .alheki-btn-ghost{min-height:44px;padding:.5rem 1.1rem;border:2px solid var(--bk-green);background:#fff;color:var(--bk-green-d);font-weight:700;border-radius:10px}
[data-alheki-booking] .alheki-booking-nav .alheki-btn-ghost:hover{background:var(--bk-soft)}
[data-alheki-booking] .alheki-booking-range{font-size:.95rem;color:var(--bk-ink);opacity:1;direction:ltr;unicode-bidi:isolate;font-weight:600}
[data-alheki-booking] .alheki-booking-facts{display:flex;flex-wrap:wrap;gap:.4rem 1.25rem;align-items:center;color:var(--bk-muted)}
[data-alheki-booking] .alheki-booking-facts .alheki-balance{color:var(--bk-ink)}
/* kind tabs */
[data-alheki-booking] .alheki-kind-tab{min-height:44px;padding:.45rem 1.2rem;border:2px solid var(--bk-green);background:#fff;color:var(--bk-green-d);font-weight:700;border-radius:999px}
[data-alheki-booking] .alheki-kind-tab.is-active{background:var(--bk-green);color:#fff}
/* filters: a real grid, the reset button is a grid item and can never sit on top of another control */
[data-alheki-booking] .alheki-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem 1rem;align-items:end;padding:.9rem 1rem;background:#f3f7f6;border:1px solid var(--bk-line);border-radius:12px}
[data-alheki-booking] .alheki-filter{min-width:0;display:flex;flex-direction:column;gap:.3rem}
[data-alheki-booking] .alheki-filter label{font-size:.9rem;font-weight:700;color:var(--bk-ink)}
[data-alheki-booking] .alheki-filter select,[data-alheki-booking] .alheki-filter input{width:100%;min-height:44px;border:1px solid #9fb3ad;border-radius:8px;background:#fff;color:var(--bk-ink);padding:.35rem .6rem;box-sizing:border-box}
[data-alheki-booking] .alheki-filter-reset{min-height:44px;width:100%;border:2px solid #6b7c86;background:#fff;color:var(--bk-ink);font-weight:700;border-radius:10px;position:static}
[data-alheki-booking] .alheki-filter-reset[disabled]{opacity:.55}
[data-alheki-booking] .alheki-filter-count{margin:.6rem 0;color:var(--bk-ink);font-weight:600}
/* days: one flow, only the page scrolls */
[data-alheki-booking] .alheki-day{border-radius:12px;border:1px solid var(--bk-line);overflow:hidden;background:#fff;margin-bottom:1rem}
[data-alheki-booking] .alheki-day-head{display:flex;align-items:center;gap:.75rem;padding:.6rem 1rem;background:var(--bk-green);color:#fff}
[data-alheki-booking] .alheki-day-head .alheki-day-count{margin-inline-start:auto;color:#fff;opacity:.95}
[data-alheki-booking] .alheki-slots{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.75rem;padding:.9rem}
/* the card */
[data-alheki-booking] .alheki-slot,.alheki-teacher-slots .alheki-slot{display:flex;flex-direction:column;align-items:stretch;gap:.5rem;text-align:start;padding:.8rem .9rem;border:1px solid var(--bk-line,#d5dedb);border-radius:12px;background:#fff;color:#14212b;min-height:0;white-space:normal;cursor:pointer;font:inherit}
.alheki-slot.is-group{border-top:4px solid #0f6b5c}
.alheki-slot.is-private{border-top:4px solid #1f4e8c}
.alheki-slot:hover:not([disabled]){background:#f4faf8;border-color:#0f6b5c}
.alheki-slot:focus-visible{outline:3px solid #0f6b5c;outline-offset:2px}
.alheki-slot .slot-time{display:flex;align-items:flex-end;justify-content:space-between;gap:.5rem;flex-wrap:wrap}
.alheki-slot .slot-uae{display:flex;flex-direction:column;line-height:1.1}
.alheki-slot .slot-uae .t{font-size:1.5rem;font-weight:800;font-variant-numeric:tabular-nums;color:#0a3f36;direction:ltr;unicode-bidi:isolate;text-align:start}
.alheki-slot .slot-local{display:flex;flex-direction:column;line-height:1.1;text-align:end}
.alheki-slot .slot-local-t{font-size:1.05rem;font-weight:700;color:#14212b;font-variant-numeric:tabular-nums;direction:ltr;unicode-bidi:isolate}
.alheki-slot .slot-zone{font-size:.74rem;color:#4a5a66;font-weight:600}
.alheki-slot .who{display:flex;align-items:center;gap:.55rem;min-width:0}
.alheki-slot .who-text{display:flex;flex-direction:column;min-width:0}
.alheki-slot .who-name{font-weight:700;color:#14212b;overflow-wrap:anywhere}
.alheki-slot .who-contact{font-size:.82rem;color:#2c3e4a;direction:ltr;unicode-bidi:plaintext;text-align:start}
.alheki-slot .slot-chips{display:flex;flex-wrap:wrap;gap:.35rem}
.alheki-slot .chip{display:inline-flex;align-items:center;padding:.15rem .6rem;border-radius:999px;font-size:.78rem;font-weight:700;border:1px solid transparent}
.alheki-slot .chip.kind.is-group{background:#e3f3ef;color:#0a4d41;border-color:#b7dcd3}
.alheki-slot .chip.kind.is-private{background:#e6eefa;color:#173d70;border-color:#b9cde8}
.alheki-slot .chip.dur{background:#f1f3f4;color:#2b3a44;border-color:#d9dfe2}
.alheki-slot .slot-service{font-size:.8rem;color:#4a5a66;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.alheki-slot .seats{align-self:flex-start;font-size:.8rem;font-weight:700;padding:.2rem .65rem;border-radius:999px;background:#fff3dc;color:#7a4b00;border:1px solid #efd3a0}
.alheki-slot .seats.is-last{background:#ffe6c2}
.alheki-slot .seats.is-private{background:#e6eefa;color:#173d70;border-color:#b9cde8}
.alheki-slot[disabled],.alheki-slot.is-unavailable{opacity:.6;cursor:not-allowed}
@media (max-width:900px){[data-alheki-booking] .alheki-filters{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){
  [data-alheki-booking] .alheki-filters{grid-template-columns:1fr}
  [data-alheki-booking] .alheki-slots{grid-template-columns:1fr;padding:.6rem}
  [data-alheki-booking] .alheki-booking-bar{padding:.6rem .75rem}
  [data-alheki-booking] .alheki-booking-nav{width:100%;justify-content:space-between}
}
/* the confirmation dialog */
.alheki-modal{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1rem;background:rgba(10,20,28,.55)}
.alheki-modal-box.alheki-confirm{direction:rtl;width:min(94vw,440px);max-height:92vh;overflow:auto;background:#fff;color:#14212b;border-radius:16px;padding:1.25rem 1.35rem;box-shadow:0 18px 50px rgba(0,0,0,.35)}
.alheki-confirm h3{margin:0 0 .75rem;font-size:1.25rem;color:#0a3f36}
.alheki-confirm-rows{margin:0 0 .75rem;display:grid;gap:.1rem}
.alheki-confirm-rows .row{display:flex;justify-content:space-between;gap:1rem;padding:.5rem 0;border-bottom:1px solid #e6ecea}
.alheki-confirm-rows dt{margin:0;color:#4a5a66;font-weight:600;font-size:.9rem}
.alheki-confirm-rows dd{margin:0;font-weight:700;text-align:end;overflow-wrap:anywhere}
.alheki-confirm-rows .row.is-main dd{font-size:1.25rem;color:#0a3f36;direction:ltr;unicode-bidi:isolate}
.alheki-confirm .alheki-note{background:#e6eefa;border:1px solid #b9cde8;color:#173d70;border-radius:10px;padding:.55rem .75rem;margin:.5rem 0 0}
.alheki-confirm-actions{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1rem}
.alheki-confirm-actions .alheki-btn,.alheki-confirm-actions .alheki-btn-ghost{flex:1 1 140px;min-height:46px;display:inline-flex;align-items:center;justify-content:center;font-weight:700;border-radius:10px;text-decoration:none}
.alheki-confirm-actions .alheki-btn-ghost{border:2px solid #6b7c86;background:#fff;color:#14212b}
.alheki-confirm .alheki-after-book{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:.75rem}
/* the teacher filter is one of the grid's controls, not a boxed row of its own */
[data-alheki-booking] .alheki-filters .alheki-teacher-filter{display:flex;flex-direction:column;align-items:stretch;gap:.3rem;margin:0;padding:0;border:0;background:transparent;box-shadow:none;flex-wrap:nowrap}
[data-alheki-booking] .alheki-filters .alheki-teacher-filter select{min-width:0;max-width:none;width:100%}

/* ======================================================================================================================
   REF-06 (approved) — «تقييماتي»: one card per measure (average out of 5, stars, count, spread), then one table per measure.
   ====================================================================================================================== */
.alheki-ratings{direction:rtl}
.alheki-ratings h2{margin:0 0 .15rem}
.alheki-rating-sub{margin:0 0 1rem;color:#4a5a66}
.alheki-rating-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:1rem;margin-bottom:1.25rem}
.alheki-rating-card{border:1px solid #d5dedb;border-radius:14px;padding:1rem 1.1rem;background:#fff}
.alheki-rating-body{display:flex;gap:1.25rem;align-items:center;flex-wrap:wrap}
.alheki-rating-big{display:flex;flex-direction:column;align-items:center;gap:.25rem;min-width:9rem}
.alheki-rating-big .avgline{display:flex;align-items:baseline;gap:.25rem}
.alheki-rating-big .avg{font-size:2.6rem;line-height:1;color:#0f2447}
.alheki-rating-count{margin:.1rem 0 0;color:#4a5a66;font-size:.9rem}
.alheki-rating-bars{flex:1 1 200px;display:grid;gap:.3rem;min-width:0}
.alheki-rating-bars .bar-row{display:grid;grid-template-columns:4.2rem 1fr 1.6rem;gap:.5rem;align-items:center;font-size:.85rem;color:#2c3e4a}
.alheki-rating-bars .bar-track{height:8px;border-radius:99px;background:#e9edf0;overflow:hidden;display:block}
.alheki-rating-bars .bar-fill{display:block;height:100%;background:#f5a623;border-radius:99px}
.alheki-rating-bars .bar-n{text-align:end;font-variant-numeric:tabular-nums}
.alheki-rating-table{border:1px solid #d5dedb;border-radius:14px;background:#fff;margin-bottom:1.25rem;overflow:hidden}
.alheki-rating-table-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap;padding:.8rem 1rem;border-bottom:1px solid #e6ecea}
.alheki-rating-table-head h3{margin:0;font-size:1.1rem}
.alheki-rating-table-head select{min-height:40px;border:1px solid #9fb3ad;border-radius:8px;padding:.2rem .6rem;background:#fff}
.alheki-rating-scroll{overflow-x:auto}
.alheki-rating-table table{width:100%;border-collapse:collapse;min-width:640px}
.alheki-rating-table th{background:#eef3f8;color:#14212b;font-weight:700;text-align:start;padding:.6rem .8rem;font-size:.9rem;white-space:nowrap}
.alheki-rating-table td{padding:.6rem .8rem;border-top:1px solid #e6ecea;vertical-align:middle;font-size:.92rem}
.alheki-rating-table tr.is-target td{background:#fff7df}
.alheki-rating-table .stars{color:#f5a623;letter-spacing:1px;direction:ltr;unicode-bidi:isolate}
.alheki-rating-table .rate small{color:#4a5a66}
.alheki-rating-open{min-height:36px;padding:.2rem .8rem;border:1.5px solid #1f4e8c;background:#fff;color:#1f4e8c;border-radius:8px;font-weight:700;font-size:.85rem;white-space:nowrap}
.alheki-rating-detail td{background:#f7f9fb}
.alheki-rating-dl{display:grid;gap:.35rem;margin:0 0 .6rem}
.alheki-rating-dl>div{display:flex;gap:.75rem}
.alheki-rating-dl dt{min-width:7rem;color:#4a5a66;font-weight:600;margin:0}
.alheki-rating-dl dd{margin:0;overflow-wrap:anywhere}
@media (max-width:640px){
  .alheki-rating-table table{min-width:0}
  .alheki-rating-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .alheki-rating-table tr{display:block;border-top:1px solid #d5dedb;padding:.4rem .6rem}
  .alheki-rating-table td{display:flex;justify-content:space-between;gap:1rem;border:0;padding:.3rem .2rem}
  .alheki-rating-table td::before{content:attr(data-label);color:#4a5a66;font-weight:700;flex:0 0 auto}
  .alheki-rating-table td.c-act{justify-content:flex-end}
  .alheki-rating-table td.c-act::before{content:none}
  .alheki-rating-table tr.alheki-rating-detail[hidden]{display:none}
  .alheki-rating-table tr.alheki-rating-detail td{display:block}
  .alheki-rating-table tr.alheki-rating-detail td::before{content:none}
}
/* specificity: the theme's global button style turns every <button> into a large navy pill */
.alheki-ratings .alheki-rating-table button.alheki-rating-open{min-height:36px;width:auto;padding:.2rem .8rem;background:#fff !important;color:#1f4e8c !important;border:1.5px solid #1f4e8c !important;border-radius:8px;font-weight:700;font-size:.85rem;white-space:nowrap;box-shadow:none}
.alheki-ratings .alheki-rating-table button.alheki-rating-open:hover{background:#eef3f8 !important}
.alheki-ratings .alheki-rating-table-head select{width:auto;min-width:11rem;max-width:100%}
.alheki-rating-table .rate small{direction:ltr;unicode-bidi:isolate;display:inline-block}
.alheki-rating-table td.c-date{white-space:nowrap;direction:ltr;unicode-bidi:isolate;text-align:start}
.alheki-rating-detail .alheki-btn{display:inline-flex;min-height:40px;align-items:center;text-decoration:none}

/* ======================================================================================================================
   REF-04 / REF-05 — the student's «حصصي»: title, summary tiles, five tabs over one list, and the teacher's notes side pane.
   ====================================================================================================================== */
.alheki-lessons-title{margin:0 0 .75rem;font-size:1.5rem;color:#0f2447}
.alheki-lessons-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.6rem;margin-bottom:1rem}
.alheki-lessons-summary .tile{display:flex;flex-direction:column;gap:.1rem;padding:.7rem .9rem;border:1px solid #d5dedb;border-radius:12px;background:#fff}
.alheki-lessons-summary .tile strong{font-size:1.6rem;line-height:1.1;color:#0f2447}
.alheki-lessons-summary .tile span{color:#4a5a66;font-size:.85rem}
.alheki-lessons-summary .t-await strong{color:#7a4b00}
.alheki-lessons-summary .t-rate{grid-column:span 2}
.alheki-lessons-summary .t-rate .alheki-avgstars{font-size:1.2rem}
.alheki-lesson-tabs{display:flex;gap:.4rem;flex-wrap:wrap;margin:.25rem 0 .75rem;border-bottom:1px solid #d5dedb;padding-bottom:.5rem}
.alheki-sessions button.alheki-lesson-tab{width:auto;min-height:40px;padding:.3rem .95rem;border-radius:999px;background:#eef2f6 !important;color:#14212b !important;border:1px solid #c9d3dd !important;font-weight:700;font-size:.9rem;box-shadow:none}
.alheki-sessions button.alheki-lesson-tab.is-active{background:#1f3c88 !important;color:#fff !important;border-color:#1f3c88 !important}
.alheki-lesson-tab .cnt{display:inline-block;margin-inline-start:.4rem;min-width:1.4rem;padding:0 .35rem;border-radius:99px;background:rgba(0,0,0,.12);font-size:.78rem;text-align:center}
.alheki-lesson-tab.is-active .cnt{background:rgba(255,255,255,.25)}
.alheki-lessons-scroll{overflow-x:auto;border:1px solid #d5dedb;border-radius:12px;background:#fff}
.alheki-lessons-table{width:100%;border-collapse:collapse;min-width:720px}
.alheki-lessons-table th{background:#eef3f8;text-align:start;padding:.6rem .8rem;font-size:.9rem;white-space:nowrap}
.alheki-lessons-table td{padding:.6rem .8rem;border-top:1px solid #e6ecea;vertical-align:middle;font-size:.92rem}
.alheki-lessons-table .when{display:flex;flex-direction:column;line-height:1.2}
.alheki-lessons-table .when strong{direction:ltr;unicode-bidi:isolate;text-align:start;font-variant-numeric:tabular-nums}
.alheki-lessons-table .when small{color:#4a5a66;font-size:.74rem}
.alheki-lessons-table .rates{display:flex;flex-direction:column;gap:.2rem}
.alheki-lessons-table .c-act{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}
.alheki-lessons-table .c-act button{min-height:36px;width:auto;padding:.2rem .8rem;font-size:.85rem;font-weight:700;border-radius:8px}
@media (max-width:700px){
  .alheki-lessons-table{min-width:0}
  .alheki-lessons-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .alheki-lessons-table tr{display:block;border-top:1px solid #d5dedb;padding:.4rem .7rem}
  .alheki-lessons-table td{display:flex;justify-content:space-between;gap:1rem;border:0;padding:.3rem 0}
  .alheki-lessons-table td::before{content:attr(data-label);color:#4a5a66;font-weight:700;flex:0 0 auto}
  .alheki-lessons-table td.c-act{justify-content:flex-start}
  .alheki-lessons-table td.c-act::before{content:none}
}
/* the teacher's notes: a side pane on a computer, a bottom sheet on a phone */
.alheki-notes-shade{position:fixed;inset:0;background:rgba(10,20,28,.45);z-index:99998}
.alheki-notes-pane{position:fixed;z-index:99999;top:0;bottom:0;inset-inline-start:0;width:min(92vw,400px);background:#fff;color:#14212b;overflow:auto;padding:1rem 1.1rem 1.2rem;box-shadow:0 0 40px rgba(0,0,0,.3);direction:rtl}
.alheki-notes-pane .np-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}
.alheki-notes-pane h3{margin:0;font-size:1.2rem}
.alheki-notes-pane .np-x{width:40px;min-height:40px;padding:0;border-radius:50%;background:#eef2f6 !important;color:#14212b !important;border:1px solid #c9d3dd !important;font-size:1.3rem;line-height:1}
.alheki-notes-pane .np-who{display:flex;align-items:center;gap:.7rem;padding:.7rem 0;border-bottom:1px solid #e6ecea}
.alheki-notes-pane .np-who img{border-radius:50%}
.alheki-notes-pane .np-who small{display:block;color:#4a5a66}
.alheki-notes-pane .np-rate{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin:.8rem 0;padding:.6rem .8rem;border-radius:10px;background:#eaf6ef}
.alheki-notes-pane .stars{color:#f5a623;letter-spacing:1px;direction:ltr;unicode-bidi:isolate}
.alheki-notes-pane .np-sec{padding:.6rem 0;border-bottom:1px solid #eef1f3}
.alheki-notes-pane .np-sec h4{margin:0 0 .3rem;font-size:1rem;color:#0f2447}
.alheki-notes-pane .np-sec p,.alheki-notes-pane .np-sec li{line-height:1.8;margin:0}
.alheki-notes-pane .np-sec ul{margin:0;padding-inline-start:1.2rem}
.alheki-notes-pane .np-close{width:100%;margin-top:1rem;min-height:46px;background:#1f3c88 !important;color:#fff !important;border:0 !important}
@media (max-width:700px){
  .alheki-notes-pane{top:auto;inset-inline:0;width:auto;max-height:86vh;border-radius:18px 18px 0 0}
}

/* ======================================================================================================================
   REQ-05 retest (2026-10-20) — one button system for the tour, an obvious current step, and a finished state that is finished.
   ====================================================================================================================== */
/* `hidden` must win: .alheki-tour-nav and .alheki-tour-done set their own display, which silently beat the attribute — that is why
   the previous/next row and the step count stayed on screen after Finish or Skip. */
.alheki-tour [hidden]{display:none !important}
.alheki-tour.is-finished .alheki-tour-bar,.alheki-tour.is-finished .alheki-tour-step,.alheki-tour.is-finished .alheki-tour-nav{display:none !important}
.alheki-tour-done{padding:2rem 1rem;text-align:center;background:#fff;border:1px solid #d5dedb;border-radius:14px}
.alheki-tour-done p{margin:0 0 1rem;font-size:1.2rem;font-weight:700;color:#0f2447}
.alheki-tour-done-actions{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap}
/* buttons: same size, radius, weight and states everywhere in the tour */
.alheki-tour a.alheki-btn,.alheki-tour button.alheki-btn,.alheki-tour .alheki-btn-ghost,.alheki-tour .alheki-tour-skip,.alheki-tour .alheki-tour-restart{
  display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-height:46px;min-width:46px;padding:.6rem 1.35rem;
  border-radius:10px;font:inherit;font-size:1rem;font-weight:700;line-height:1.2;text-decoration:none !important;cursor:pointer;
  transition:background-color .15s,border-color .15s,box-shadow .15s}
.alheki-tour a.alheki-btn,.alheki-tour button.alheki-btn{background:#1f3c88 !important;color:#fff !important;border:2px solid #1f3c88 !important}
.alheki-tour a.alheki-btn:hover,.alheki-tour button.alheki-btn:hover{background:#162c66 !important;border-color:#162c66 !important}
.alheki-tour .alheki-btn-ghost,.alheki-tour .alheki-tour-skip,.alheki-tour .alheki-tour-restart{background:#fff !important;color:#1f3c88 !important;border:2px solid #1f3c88 !important;opacity:1}
.alheki-tour .alheki-btn-ghost:hover,.alheki-tour .alheki-tour-skip:hover,.alheki-tour .alheki-tour-restart:hover{background:#eef3fb !important}
.alheki-tour a.alheki-btn:focus-visible,.alheki-tour button:focus-visible{outline:3px solid #f2b705;outline-offset:2px}
.alheki-tour .alheki-tour-nav button[disabled]{opacity:.45;cursor:not-allowed}
.alheki-tour .alheki-tour-skip,.alheki-tour .alheki-tour-restart{min-height:40px;padding:.4rem 1rem;font-size:.9rem}
.alheki-tour .alheki-tour-bar{gap:.6rem}
/* progress dots: every step visible, the current one unmistakable */
.alheki-tour .alheki-tour-dots{display:flex;gap:.55rem;align-items:center}
.alheki-tour .alheki-tour-dots .alheki-tour-dot{width:14px;height:14px;min-width:14px;min-height:14px;padding:0;border-radius:50%;background:#fff !important;border:2px solid #7d8a96 !important;box-shadow:none;transform:none}
.alheki-tour .alheki-tour-dots .alheki-tour-dot.is-current{width:20px;height:20px;min-width:20px;min-height:20px;background:#1f3c88 !important;border-color:#1f3c88 !important;box-shadow:0 0 0 4px rgba(31,60,136,.22);transform:none}
.alheki-tour .alheki-tour-progress{background:#dfe5ea}
.alheki-tour .alheki-tour-progress-fill{background:#1f3c88}
@media (max-width:560px){
  .alheki-tour a.alheki-btn,.alheki-tour button.alheki-btn,.alheki-tour .alheki-btn-ghost{min-height:48px}
  .alheki-tour .alheki-tour-nav{flex-wrap:wrap;gap:.6rem}
  .alheki-tour .alheki-tour-nav .alheki-btn,.alheki-tour .alheki-tour-nav .alheki-btn-ghost{flex:1 1 40%}
  .alheki-tour .alheki-tour-cta .alheki-btn{width:100%}
}
@media (max-width:560px){
  /* week navigation on a phone: the dates on their own line, then «السابق» and «التالي» side by side, equal width */
  [data-alheki-booking] .alheki-booking-nav{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;width:100%}
  [data-alheki-booking] .alheki-booking-nav .alheki-booking-range{grid-column:1 / -1;grid-row:1;text-align:center}
  [data-alheki-booking] .alheki-booking-nav .alheki-btn-ghost{grid-row:2;width:100%}
}
