/* سامانه مدرسه — Persian RTL, mobile-first, Vazirmatn self-hosted (Tahoma fallback) */
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:400;font-display:swap;src:url(fonts/vazirmatn-arabic-400.woff2) format('woff2');unicode-range:U+0600-06FF,U+0750-077F,U+0870-0891,U+0897-08E1,U+08E3-08FF,U+200C-200E,U+2010-2011,U+204F,U+2E41,U+FB50-FDFF,U+FE70-FE74,U+FE76-FEFC,U+102E0-102FB,U+10E60-10E7E,U+10EC2-10EC7,U+10EC9-10EEE,U+10EF0-10EFF,U+1EE00-1EE03,U+1EE05-1EE1F,U+1EE21-1EE22,U+1EE24,U+1EE27,U+1EE29-1EE32,U+1EE34-1EE37,U+1EE39,U+1EE3B,U+1EE42,U+1EE47,U+1EE49,U+1EE4B,U+1EE4D-1EE4F,U+1EE51-1EE52,U+1EE54,U+1EE57,U+1EE59,U+1EE5B,U+1EE5D,U+1EE5F,U+1EE61-1EE62,U+1EE64,U+1EE67-1EE6A,U+1EE6C-1EE72,U+1EE74-1EE77,U+1EE79-1EE7C,U+1EE7E,U+1EE80-1EE89,U+1EE8B-1EE9B,U+1EEA1-1EEA3,U+1EEA5-1EEA9,U+1EEAB-1EEBB,U+1EEF0-1EEF1}
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:700;font-display:swap;src:url(fonts/vazirmatn-arabic-700.woff2) format('woff2');unicode-range:U+0600-06FF,U+0750-077F,U+0870-0891,U+0897-08E1,U+08E3-08FF,U+200C-200E,U+2010-2011,U+204F,U+2E41,U+FB50-FDFF,U+FE70-FE74,U+FE76-FEFC,U+102E0-102FB,U+10E60-10E7E,U+10EC2-10EC7,U+10EC9-10EEE,U+10EF0-10EFF,U+1EE00-1EE03,U+1EE05-1EE1F,U+1EE21-1EE22,U+1EE24,U+1EE27,U+1EE29-1EE32,U+1EE34-1EE37,U+1EE39,U+1EE3B,U+1EE42,U+1EE47,U+1EE49,U+1EE4B,U+1EE4D-1EE4F,U+1EE51-1EE52,U+1EE54,U+1EE57,U+1EE59,U+1EE5B,U+1EE5D,U+1EE5F,U+1EE61-1EE62,U+1EE64,U+1EE67-1EE6A,U+1EE6C-1EE72,U+1EE74-1EE77,U+1EE79-1EE7C,U+1EE7E,U+1EE80-1EE89,U+1EE8B-1EE9B,U+1EEA1-1EEA3,U+1EEA5-1EEA9,U+1EEAB-1EEBB,U+1EEF0-1EEF1}
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:400;font-display:swap;src:url(fonts/vazirmatn-latin-400.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Vazirmatn';font-style:normal;font-weight:700;font-display:swap;src:url(fonts/vazirmatn-latin-700.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{
  --navy:#1b2a4a; --navy2:#24365e; --orange:#e67e22; --green:#1e7d46;
  --red:#c0392b; --amber:#b7791f; --bg:#f2f4f7; --card:#fff; --line:#dfe3ea;
  --text:#1c2433; --muted:#667085; --radius:12px;
  --font:'Vazirmatn',Tahoma,'Segoe UI','IRANSans',sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);font-size:15px;line-height:1.8}
.hidden{display:none!important}
h1,h2,h3{margin:.2em 0 .6em;line-height:1.5}
h1{font-size:1.25rem} h2{font-size:1.1rem} h3{font-size:1rem}
p{margin:.3em 0}
a{color:var(--navy2)}
button{font-family:var(--font);cursor:pointer}
input,select,textarea{font-family:var(--font);font-size:15px;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;width:100%}
input[type=checkbox],input[type=radio]{width:auto}
label{display:block;font-weight:700;margin:10px 0 4px}
textarea{min-height:90px;resize:vertical}
.justify{text-align:justify;text-align-last:right}
.center{text-align:center}
.muted{color:var(--muted);font-size:.9em}
.small{font-size:.85em}
.num{font-variant-numeric:tabular-nums}

/* ---------- top bar (two compact rows; hides on scroll down) ---------- */
#topbar{background:var(--navy);color:#fff;position:sticky;top:0;z-index:50;transition:transform .25s ease}
#topbar.topbar-hidden{transform:translateY(-105%)}
.topbar-inner{display:flex;flex-direction:column;gap:2px;padding:6px 12px 8px}
.topbar-row{display:flex;align-items:center;gap:8px}
.topbar-row1{justify-content:space-between}
.topbar-row2{justify-content:flex-start}
.brand-title{font-weight:700;font-size:1.05rem;white-space:nowrap}
.role-badge{background:var(--orange);color:#fff;border-radius:20px;padding:1px 10px;font-size:.8rem}
#schoolSwitcher{width:auto;max-width:60%;background:#fff;color:#000}
/* ---------- hamburger menu panel ---------- */
.menu-panel{background:var(--navy);border-top:1px solid rgba(255,255,255,.15);padding:6px 10px 10px;display:flex;flex-direction:column;gap:2px}
.menu-item{display:flex;align-items:center;gap:8px;background:transparent;border:0;color:#dbe4f3;border-radius:8px;padding:9px 12px;font-size:.95rem;text-align:start;cursor:pointer;width:100%}
.menu-item:hover{background:rgba(255,255,255,.1);color:#fff}
.menu-item.active{background:#fff;color:var(--navy);font-weight:700}
.menu-item.danger{color:#ffb4ab}
.menu-item.danger:hover{background:rgba(255,255,255,.1);color:#ffd7d2}
.menu-sep{height:1px;background:rgba(255,255,255,.18);margin:6px 4px}
/* ---------- inline SVG icons ---------- */
.ico{vertical-align:-3px;flex-shrink:0}
.btn-icon{display:inline-flex;align-items:center;justify-content:center}
.btn-icon .ico{vertical-align:0}
.menu-item .ico{vertical-align:0}
/* ---------- icon guide modal ---------- */
.icon-guide{display:grid;grid-template-columns:repeat(2,1fr);gap:6px 16px;margin-top:10px}
.icon-guide-row{display:flex;align-items:center;gap:10px;padding:6px 4px;border-bottom:1px solid var(--line)}
.icon-guide-ico{display:inline-flex;color:var(--navy)}
@media(max-width:640px){.icon-guide{grid-template-columns:1fr}}

/* ---------- layout ---------- */
.app{max-width:980px;margin:0 auto;padding:14px 12px 60px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:14px}
.card h2{margin-top:0}
.grid{display:grid;gap:12px}
.grid.cols2{grid-template-columns:repeat(2,1fr)}
.grid.cols3{grid-template-columns:repeat(3,1fr)}
.grid.cols4{grid-template-columns:repeat(4,1fr)}
@media(max-width:640px){.grid.cols2,.grid.cols3,.grid.cols4{grid-template-columns:repeat(2,1fr)}}
.stat{background:#f8fafc;border:1px solid var(--line);border-radius:10px;padding:10px;text-align:center}
.stat .v{font-size:1.4rem;font-weight:700;color:var(--navy)}
.stat .k{font-size:.85rem;color:var(--muted)}
.stat.ok .v{color:var(--green)} .stat.warn .v{color:var(--amber)} .stat.bad .v{color:var(--red)}

/* ---------- buttons / chips ---------- */
.btn{display:inline-block;border:1px solid var(--navy);background:var(--navy);color:#fff;border-radius:8px;padding:8px 16px;font-size:15px;text-decoration:none}
.btn:hover{background:var(--navy2)}
.btn.secondary{background:#fff;color:var(--navy)}
.btn.danger{background:var(--red);border-color:var(--red)}
.btn.warn{background:#fff;color:var(--amber);border-color:var(--amber)}
.btn.success{background:var(--green);border-color:var(--green)}
.btn.ghost{background:transparent;border-color:rgba(255,255,255,.6);color:#fff;padding:5px 10px}
.btn-sm{padding:4px 10px;font-size:.85rem}
.btn-icon{padding:5px 9px;font-size:1.05rem;line-height:1.2;min-width:36px;text-align:center}
@media(max-width:640px){table th,table td{padding:6px 5px;font-size:.92rem}.btn-icon{min-width:32px;padding:4px 7px}}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-block{width:100%;text-align:center}
.chip{display:inline-block;border:1px solid var(--line);background:#fff;border-radius:20px;padding:5px 13px;margin:3px;cursor:pointer}
.chip.active{background:var(--navy);color:#fff;border-color:var(--navy);font-weight:700}
.chip:disabled{opacity:.45;cursor:not-allowed}
.badge{display:inline-block;border-radius:12px;padding:1px 9px;font-size:.8rem;background:#eef1f6;color:#333}
.badge.green{background:#d9f0e2;color:#14532d}
.badge.red{background:#fde3e0;color:#7a1f16}
.badge.amber{background:#fdf0d3;color:#7a5410}
.badge.blue{background:#dde8fb;color:#1b2a4a}
.badge.grey{background:#eceef2;color:#555}

/* ---------- tables ---------- */
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;background:#fff}
th,td{border:1px solid var(--line);padding:7px 6px;text-align:center;vertical-align:middle}
th{background:#eef1f6;font-size:.9rem}
td.name,td.justify{text-align:right}
tr.clickable{cursor:pointer}
tr.clickable:hover{background:#f6f8fc}

/* ---------- login ---------- */
.login-wrap{max-width:460px;margin:24px auto}
.login-wrap h1{text-align:center}
.login-back{margin-bottom:10px}

/* ---------- landing page (patch at) ---------- */
.landing{max-width:560px;margin:6px auto 0}
.landing-hero{background:linear-gradient(135deg,var(--navy) 0%,var(--navy2) 55%,#31507f 100%);color:#fff;border-radius:16px;padding:30px 20px 26px;text-align:center;box-shadow:0 8px 24px rgba(27,42,74,.25)}
.landing-badge{width:74px;height:74px;margin:0 auto 12px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.28);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#ffb35c}
.landing-hero h1{font-size:1.4rem;margin:.1em 0 .35em;color:#fff}
.landing-tag{color:#cfdaee;font-size:.95rem;margin:0}
.landing-q{text-align:center;font-weight:700;margin:20px 0 10px;color:var(--navy)}
.role-cards{display:grid;gap:10px}
.role-card{display:flex;align-items:center;gap:12px;width:100%;text-align:start;background:#fff;border:1.5px solid var(--line);border-radius:14px;padding:14px 16px;cursor:pointer;font-family:var(--font);transition:border-color .15s,box-shadow .15s}
.role-card:hover{border-color:var(--navy2);box-shadow:0 3px 12px rgba(27,42,74,.13)}
.role-card .rc-ico{width:48px;height:48px;flex-shrink:0;border-radius:12px;background:#eef2f9;color:var(--navy);display:flex;align-items:center;justify-content:center}
.role-card.featured{border-color:var(--orange);background:#fffaf4}
.role-card.featured .rc-ico{background:#fdeeda;color:var(--orange)}
.rc-title{font-weight:700;font-size:1.05rem;color:var(--text)}
.rc-sub{color:var(--muted);font-size:.88rem}
.rc-arrow{margin-inline-start:auto;color:var(--muted);display:flex}
.landing-foot{text-align:center;margin-top:18px}

/* ---------- login form banner (patch au) ---------- */
.login-banner{display:flex;align-items:center;gap:10px;border-radius:12px;padding:12px 16px;margin-bottom:14px;color:#fff;box-shadow:0 4px 14px rgba(27,42,74,.18)}
.login-banner .lb-ico{width:40px;height:40px;flex-shrink:0;border-radius:10px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.3);display:flex;align-items:center;justify-content:center}
.login-banner .lb-title{font-weight:700;font-size:1.05rem}
.lb-parent{background:linear-gradient(135deg,var(--orange) 0%,#cf6a15 100%)}
.lb-teacher{background:linear-gradient(135deg,var(--navy) 0%,var(--navy2) 60%,#31507f 100%)}
.lb-manager{background:linear-gradient(135deg,#1e7d46 0%,#14532d 100%)}
.lb-admin{background:linear-gradient(135deg,#2d3436 0%,#4b565a 100%)}
.tabs{display:flex;border-bottom:2px solid var(--line);margin-bottom:14px}
.tabs button{flex:1;background:none;border:none;padding:10px 4px;font-size:15px;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-2px}
.tabs button.active{color:var(--navy);font-weight:700;border-bottom-color:var(--orange)}
.alert{border-radius:8px;padding:10px 12px;margin:10px 0}
.alert.error{background:#fdeceb;color:#7a1f16;border:1px solid #f5c6c0}
.alert.warn{background:#fdf6e3;color:#7a5410;border:1px solid #f0dcae}
.alert.ok{background:#e6f4ea;color:#14532d;border:1px solid #bfe3c9}
.alert.info{background:#e8eefb;color:#1b2a4a;border:1px solid #c3d2ef}
.hint{font-size:.85rem;color:var(--muted)}

/* ---------- attendance / grades ---------- */
.status-row{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.status-row .chip{padding:4px 10px;margin:2px}
.roster-name{text-align:right;font-weight:700}
.asg-name{cursor:pointer}
.book-nav{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:10px 0}
.book-date{font-weight:700}
input.grade-input{width:76px;text-align:center;padding:6px}
.kv{display:flex;justify-content:space-between;gap:10px;padding:5px 0;border-bottom:1px dashed var(--line)}
.kv:last-child{border-bottom:none}
.kv b{font-weight:700}
.list-item{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:9px 2px;border-bottom:1px solid var(--line)}
.list-item:last-child{border-bottom:none}
.linklike{background:none;border:none;color:var(--navy2);text-decoration:underline;padding:0;font-size:inherit}
.matrix td{cursor:pointer}
.matrix td.sel{background:#dde8fb}
.matrix td.unrec{color:var(--muted)}
.modal-back{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:flex-end;justify-content:center;z-index:100}
.modal{background:#fff;border-radius:14px 14px 0 0;width:100%;max-width:640px;max-height:88vh;overflow:auto;padding:16px}
@media(min-width:700px){.modal-back{align-items:center}.modal{border-radius:14px}}
#toastRoot{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:#1c2433;color:#fff;border-radius:8px;padding:9px 16px;box-shadow:0 4px 14px rgba(0,0,0,.3)}
.toast.err{background:var(--red)}
.photo-grid{display:flex;gap:8px;flex-wrap:wrap}
.photo-grid figure{margin:0;width:104px}
.photo-grid img{width:104px;height:104px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.photo-grid figcaption{font-size:.75rem;text-align:center}
.progress{height:8px;background:#e8ecf2;border-radius:6px;overflow:hidden}
.progress i{display:block;height:100%;background:var(--green)}
.section-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.section-tabs button{border:1px solid var(--line);background:#fff;border-radius:20px;padding:6px 14px}
.section-tabs button.active{background:var(--navy);color:#fff;border-color:var(--navy)}
.empty{color:var(--muted);text-align:center;padding:18px 6px}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:end;margin-bottom:12px}
.toolbar>*{flex:1;min-width:140px}
.toolbar .btn{flex:0 0 auto}
/* Compact input inside a toolbar (patch n): the "new grade / new class"
   fields no longer stretch full-width. */
.toolbar .field-narrow{flex:0 1 280px;min-width:180px}
/* Collapsible grade block (patch o): keeps the structure tab compact. */
.grade-block{border:1px solid var(--line,#e3e6ea);border-radius:10px;padding:8px 10px;margin-bottom:10px}
/* Inherited timetable cell (patch ae): a class cell that comes from the
   grade default — dashed border; changing it makes a class override. */
.ttCell.inherited{border-style:dashed}
.grade-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.grade-head .chev{display:inline-flex;transition:transform .15s}
.grade-head .chev.open{transform:rotate(180deg)}
.grade-body{margin-top:8px}
/* Announcement bar (patch r): full-width bar at the top of the panel;
   orange for info, red for urgent. Long text scrolls left-to-right. */
.announce{overflow:hidden;white-space:nowrap;border:1px solid;padding:10px 0;margin-bottom:12px;text-align:center}
.announce.info{background:#fff7e6;border-color:#f0b429;color:#7a5200}
.announce.urgent{background:#fdecea;border-color:#e57373;color:#8f1d1d}
.announce-track{display:inline-block;white-space:nowrap;padding:0 16px;direction:rtl;unicode-bidi:plaintext}
.announce.marquee{direction:ltr;text-align:left}
.announce.marquee .announce-track{animation:announce-scroll linear infinite}
@keyframes announce-scroll{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
@media (prefers-reduced-motion: reduce){.announce.marquee .announce-track{animation:none}}
#announceRoot .announce{margin-bottom:0}
/* Parent section navigation (patch t): visible chips that scroll to a section. */
.pv-nav{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.pv-today{border-top:1px solid var(--line,#e3e6ea);margin-top:12px;padding-top:10px}
.pv-today h3{margin:0 0 6px}
.pv-today p{margin:4px 0}
@media print{ #topbar,#announceRoot,#toastRoot,.no-print{display:none!important} body{background:#fff} .app{max-width:none;padding:0} }

/* chat (patch ao): parent <-> manager threads */
.chat-thread { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; }
.chat-msg { max-width: 85%; padding: 8px 12px; border-radius: 12px; background: #eef2ff; align-self: flex-start; }
.chat-msg.mine { background: #dcfce7; align-self: flex-end; }
.chat-who { font-size: .75rem; color: #64748b; margin-bottom: 4px; }
.chat-body { white-space: pre-wrap; text-align: justify; }
.chat-photo { display: block; max-width: 230px; width: 100%; min-height: 40px; margin-top: 6px; border-radius: 8px; background: #e2e8f0; }

/* parent view tabs (patch aq): one section at a time + dashboard actions */
.pv-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 12px; }
.pv-tab { border: 1px solid var(--line); background: var(--card); color: var(--text); border-radius: 999px; padding: 6px 14px; font: inherit; font-size: .92rem; cursor: pointer; }
.pv-tab.active { background: var(--navy); border-color: var(--navy); color: #fff; font-weight: 700; }
.pv-section[hidden] { display: none !important; }
.pv-action { display: flex; align-items: center; justify-content: space-between; gap: 10px; border: 1px solid #f0c36d; background: #fff8e6; border-radius: 10px; padding: 10px 12px; margin-top: 10px; }
.pv-action[hidden] { display: none !important; }

/* today's status, per-bell visual cards (patch ar) */
.today-summary { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 2px; }
.ts-chip { border-radius: 999px; padding: 2px 12px; font-size: .85rem; font-weight: 700; }
.ts-chip.green { background: #dcfce7; color: #166534; }
.ts-chip.amber { background: #fef3c7; color: #92400e; }
.ts-chip.red { background: #fee2e2; color: #991b1b; }
.ts-chip.grey { background: #e5e7eb; color: #374151; }
.today-bells { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 8px; }
.today-bell { border: 1.5px solid var(--line); border-radius: 12px; padding: 10px 8px; text-align: center; background: #fafbfc; }
.today-bell .tb-bell { font-size: .8rem; color: var(--muted); }
.today-bell .tb-subject { font-weight: 800; font-size: 1.02rem; margin: 3px 0 8px; }
.today-bell .tb-note { font-size: .78rem; color: var(--muted); }
.today-bell.st-present { border-color: #4ade80; background: #f0fdf4; }
.today-bell.st-late { border-color: #fbbf24; background: #fffbeb; }
.today-bell.st-absent { border-color: #f87171; background: #fef2f2; }
.today-bell.st-excused { border-color: #a5b4fc; background: #eef2ff; }
.pv-today-off { font-weight: 700; color: var(--muted); }
@media (max-width: 520px) { .today-bells { gap: 6px; } .today-bell { padding: 8px 4px; } .today-bell .tb-subject { font-size: .92rem; } }

/* manager dashboard unread-messages alert (patch as) */
/* ---------- back-to-dashboard bar (patch au) ---------- */
.backbar{margin:2px 0 10px}
.backbar .btn{display:inline-flex;align-items:center;gap:6px}

/* ---------- day-grouped accordion (patch au) ---------- */
.day-acc-list{display:grid;gap:8px}
.day-acc{border:1.5px solid var(--line);border-radius:12px;background:#fff;overflow:hidden}
.day-acc-head{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;background:#f4f7fb;border:none;padding:11px 14px;cursor:pointer;font-family:var(--font);text-align:start}
.day-acc.open .day-acc-head{background:#eef2f9}
.day-acc-title{font-weight:700;color:var(--navy)}
.day-acc-meta{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:.88rem}
.day-acc-chev{display:inline-flex;transition:transform .18s}
.day-acc.open .day-acc-chev{transform:rotate(180deg)}
.day-acc-body{padding:10px 12px}
.day-acc-body[hidden]{display:none}

.pm-alert { display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 1.5px solid var(--orange); background: #fdf3e7; }
.pm-alert-main { display: flex; flex-direction: column; gap: 2px; }
.pm-alert-actions { display: flex; gap: 8px; flex: 0 0 auto; }
/* Patch bk: on a phone the side-by-side alert crushed the text column
   (the title wrapped word by word and the card ballooned) — stack it. */
@media (max-width: 640px) {
  .pm-alert { flex-direction: column; align-items: stretch; }
  .pm-alert-actions { justify-content: flex-start; }
}
/* Patch bk: today's teacher activity as compact blocks, not a table. */
.act-item { display: block; }
.act-head { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
.act-chips { display: inline-flex; flex-wrap: wrap; gap: 2px; }
.act-chip { cursor: default; margin: 2px; padding: 3px 10px; font-size: .85em; }
.act-last { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 3px; }

/* Patch ba: today's lessons lead the teacher-home list, framed + badged. */
.day-today { border: 1.5px solid #1565c0; border-radius: 12px; padding: 2px 12px 12px; margin-top: 10px; background: #f5f9ff; }
.today-badge { background: #1565c0; color: #fff; border-radius: 999px; padding: 0 10px; font-size: .8em; vertical-align: middle; }

/* Patch bc: parent upcoming-exams highlight + class journal blocks,
   teacher journal entries. */
.pv-exams { border: 1.5px solid #ef6c00; background: #fff8f1; border-radius: 12px; padding: 10px 14px; margin-top: 12px; }
.pv-exam-row { padding: 6px 0; border-top: 1px dashed #f0c9a0; }
.pv-exam-row:first-of-type { border-top: none; }
.pv-journal { border: 1px solid #d7dee8; border-radius: 12px; padding: 10px 14px; margin-top: 12px; background: #fbfcfe; }
.pv-jr-sub h4 { margin: 8px 0 4px; }
.jr-entry { border: 1px solid #e2e8f0; border-radius: 10px; padding: 8px 10px; margin-top: 8px; }
.jr-actions { display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap; align-items: center; }

/* Patch bm: mobile-friendliness package — most users are on phones;
   only the manager uses a PC (Faisal, 2026-11-15). */
/* 1) The page itself never scrolls sideways; anything wide scrolls
   inside its own box. `clip` (not `hidden`) keeps the sticky topbar
   working. */
body { overflow-x: hidden; }
@supports (overflow: clip) { body { overflow-x: clip; } }
img, video { max-width: 100%; }
/* 2) 16px fields — iOS Safari auto-zooms into smaller inputs on focus. */
input, select, textarea { font-size: 16px; }
/* 3) Comfortable touch targets on touch devices. */
@media (pointer: coarse) {
  .btn-sm { min-height: 40px; padding: 8px 12px; }
  .btn-icon { min-width: 40px; min-height: 40px; }
  .status-row .chip { min-height: 40px; padding: 8px 14px; display: inline-flex; align-items: center; }
  .pv-tab { min-height: 40px; padding: 8px 14px; }
  .section-tabs button { min-height: 40px; }
  .menu-item { min-height: 44px; }
}
/* 4) In a scrolling table the first column stays put (درس in the
   report card, روز in the timetable, ردیف in rosters). */
.table-wrap th:first-child, .table-wrap td:first-child { position: sticky; inset-inline-start: 0; z-index: 2; background: #fff; }
.table-wrap th:first-child { background: #eef1f6; }
/* …and in .sticky2 roster tables the name column (2nd) stays too;
   their ردیف column is held at 44px so the offset is exact. */
.table-wrap.sticky2 th:first-child, .table-wrap.sticky2 td:first-child { width: 44px; min-width: 44px; }
.table-wrap.sticky2 th:nth-child(2), .table-wrap.sticky2 td:nth-child(2) { position: sticky; inset-inline-start: 44px; z-index: 2; background: #fff; box-shadow: -7px 0 8px -7px rgba(15, 23, 42, .45); }
.table-wrap.sticky2 th:nth-child(2) { background: #eef1f6; }
/* 5) The monthly report card — the widest table in the system, read
   by parents on phones — gets compact cells on small screens. */
@media (max-width: 640px) {
  .mr-table th, .mr-table td { padding: 4px 3px; font-size: .8rem; }
  .toolbar > * { min-width: 120px; }
}

/* Patch bn: homework lists (manager + teacher) as slim tappable rows —
   the 7-column tables shredded on phones; details open on tap. */
.hw-row { border-bottom: 1px solid var(--line); padding: 10px 2px; }
.hw-row:last-child { border-bottom: none; }
.hw-row-main { cursor: pointer; }
.hw-row-title { font-weight: 700; }
.hw-row-meta { color: var(--muted); font-size: .88rem; }
.hw-row-actions { display: flex; gap: 16px; margin-top: 4px; }
.danger-link { color: var(--red); }
