
:root{
  color-scheme: dark;
  --page:#0d0d0d; --surface:#1a1a19; --surface2:#212120; --surface3:#282827;
  --ink:#fff; --ink2:#c3c2b7; --muted:#898781; --border:rgba(255,255,255,.10);
  --s1:#3987e5; --s3:#199e70; --s4:#c98500; --s6:#9085e9;
  --good:#0ca30c; --warning:#fab219; --serious:#ec835a; --critical:#d03b3b;
  --yellow:#8a7a1f; --edited:#1d8a8c; --abn:#2a3638; --foot:#20201f;
  --shadow:0 1px 3px rgba(0,0,0,.4),0 8px 30px rgba(0,0,0,.25);
}
:root[data-theme="light"]{
  color-scheme: light;
  --page:#f9f9f7; --surface:#fff; --surface2:#fcfcfb; --surface3:#f4f3ef;
  --ink:#0b0b0b; --ink2:#52514e; --muted:#898781; --border:rgba(11,11,11,.10);
  --s1:#2a78d6; --s3:#1baf7a; --s4:#eda100; --s6:#388fa9;
  --yellow:#fff3a0; --edited:#cfe4ff; --abn:#eeecfb; --foot:#efeee9;
  --shadow:0 1px 2px rgba(0,0,0,.06),0 10px 30px rgba(0,0,0,.06);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;max-width:100%;overflow-x:hidden}
body{background:var(--page);color:var(--ink);font-family:'Vazirmatn','Segoe UI',Tahoma,sans-serif;line-height:1.6}
.wrap{max-width:100%;margin:0 auto;padding:0 18px 60px;min-width:0}
h1{margin:0;font-weight:800;font-size:22px;letter-spacing:-.01em}
.dim{color:var(--muted)}
header.top{padding:24px 0 14px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;align-items:flex-start}
.brand{display:flex;gap:13px;align-items:center}
.logo{width:50px;height:50px;border-radius:14px;background:linear-gradient(135deg,var(--s3),var(--s1));
  display:grid;place-items:center;font-size:24px;box-shadow:var(--shadow);flex:0 0 auto}
.sub{color:var(--ink2);font-size:13.5px;margin-top:2px}
.sub b{color:var(--ink);font-weight:800}
.sub #updBtn{background:none;border:0;cursor:pointer;font-size:14px;padding:0 6px;line-height:1;
  filter:grayscale(.3);opacity:.75}
.sub #updBtn:hover{opacity:1;filter:none}
#cal{display:none;position:absolute;z-index:250;margin-top:6px;background:var(--surface);
  border:1px solid var(--border);border-radius:12px;padding:12px;box-shadow:0 14px 40px rgba(0,0,0,.45)}
#cal.on{display:block}
#cal .row{display:flex;gap:7px;align-items:center}
#cal .row+.row{margin-top:10px}
#cal select{background:var(--surface2);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:13.5px;padding:7px 9px}
#cal select:focus{outline:2px solid var(--s1);border-color:transparent}
#cal .btn{padding:6px 12px;font-size:12.5px}
.btn{cursor:pointer;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 14px;
  color:var(--ink2);font-family:inherit;font-size:13px}
.btn:hover{color:var(--ink);border-color:var(--muted)}
.btn.p{background:var(--s3);color:#fff;border-color:transparent;font-weight:700}
.btn.p:hover{opacity:.9;color:#fff}
.btn.mgr{background:var(--s4);color:#1a1200;border-color:transparent;font-weight:800}
.btn.mgr:hover{opacity:.9;color:#1a1200}
/* section index — the report is a shell now. Every pane stays in the document and only
   the active one is displayed, so ids stay unique and the abonman code needs no change. */
.tabs{display:flex;gap:6px;flex-wrap:wrap;padding-bottom:15px;border-bottom:1px solid var(--border);margin-bottom:18px}
.tabs button{cursor:pointer;background:transparent;border:1px solid transparent;border-radius:11px;position:relative;
  padding:9px 20px;color:var(--ink2);font-family:inherit;font-size:14.5px;font-weight:700}
.tabs button:hover{color:var(--ink);background:var(--surface)}
.tabs button.on{background:var(--surface);color:var(--ink);border-color:var(--border);box-shadow:var(--shadow)}
.tabs button.on::after{content:"";position:absolute;right:20px;left:20px;bottom:-16px;height:2px;background:var(--s1)}
/* The reports are one family and read from the right; the day book is not one of
   them, so it is pushed to the far side of the bar. The auto margin eats the space
   between, which is what puts it on the left of an RTL row without hard-coding a
   side — and it still behaves if the bar wraps on a narrow window. */
.tabs button.apart{margin-inline-start:auto}
.tabs button.lk{opacity:.55}
.tabs button.lk:hover{opacity:1}
.tabs button.lk::before{content:"🔒";font-size:11px;margin-inline-end:6px;vertical-align:1px}
.pane{display:none}
.pane.on{display:block}
/* a second level of tabs, for panes that hold several reports of their own */
.subtabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}
.subtabs button{cursor:pointer;background:var(--surface2);border:1px solid var(--border);
  border-radius:20px;padding:7px 16px;color:var(--ink2);font-family:inherit;font-size:13px;font-weight:700}
.subtabs button:hover{color:var(--ink)}
.subtabs button.on{background:var(--s1);border-color:transparent;color:#fff}
.rpane{display:none}
.rpane.on{display:block}
/* toolbar buttons that only make sense on the abonman pane. Hiding by class, never by
   inline style, so the manager lock's own `hidden` keeps working underneath. */
.tools.off .abn-only{display:none}
/* each section is a whole report of its own, so it goes in an iframe: its stylesheet and
   its script stay in their own document and cannot collide with the abonman page. */
.frame{position:relative;min-height:70vh}
.frame iframe{display:block;width:100%;border:0;background:var(--page)}
.frame .load{padding:60px 0;text-align:center;color:var(--muted);font-size:14px}
/* ---- مکالمات: the call-quality log, kept native rather than embedded so new
   findings can be added and the charts redraw from them. ---- */
/* ---- جعبهٔ ثبتِ پایش در بالای نظارت ---- */
.tform .tfrow{display:grid;grid-template-columns:110px minmax(170px,1.2fr) 130px 88px minmax(170px,1fr) minmax(150px,1.3fr) auto;gap:10px;align-items:end}
.tform label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--ink2)}
.tform input,.tform select{background:var(--surface2);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:14px;padding:9px 11px;min-width:0}
.tform input:focus,.tform select:focus{outline:2px solid var(--accent);border-color:transparent}
#tf_code,#tf_date,#tf_time,#vf_code,#vf_date,#vf_time{direction:ltr;text-align:center}
.tform.vform .tfrow{grid-template-columns:110px minmax(190px,1.2fr) minmax(220px,1.4fr) 130px 88px auto}
.tform .f-name{min-height:40px;display:flex;align-items:center;gap:8px;padding:0 12px;border-radius:9px;border:1px dashed var(--border);font-size:13.5px;min-width:0}
.tform .f-name.ok{border-style:solid;border-color:color-mix(in srgb,#199e70 45%,var(--border));background:color-mix(in srgb,#199e70 10%,transparent)}
.tform .f-name.bad{border-style:solid;border-color:color-mix(in srgb,var(--warning) 55%,var(--border));background:color-mix(in srgb,var(--warning) 10%,transparent)}
.tform .f-name b{font-size:14.5px}.tform .f-name i{font-style:normal;color:var(--muted);font-size:12px}
.tform .tfmsg{min-height:20px;margin-top:9px;font-size:13px;font-weight:700}
.tform .tfmsg.ok{color:#199e70}.tform .tfmsg.err{color:var(--critical)}
.okchip{background:color-mix(in srgb,#199e70 16%,transparent);color:#199e70;border-radius:7px;padding:1px 8px;font-weight:700;white-space:nowrap}
@media (max-width:1150px){.tform .tfrow,.tform.vform .tfrow{grid-template-columns:1fr 1fr 1fr}.tform .f-name,.tform .f-note{grid-column:span 2}}
/* گوشی و پنلِ باریک: جعبهٔ تخلف هم دوستونه — قاعدهٔ سه‌ستونهٔ بالا دقیق‌تر است و باید صریح شکسته شود */
@media (max-width:640px){.tform.vform .tfrow{grid-template-columns:1fr 1fr}.tform.vform .f-name,.tform.vform .f-res,.tform.vform #vf_save{grid-column:1/-1}}
.tform .tfrow>*{min-width:0}
@media (max-width:640px){.tform .tfrow{grid-template-columns:1fr 1fr}.tform .f-name,.tform .f-note,.tform .f-res,.tform #tf_save{grid-column:1/-1}}
#tmodal{position:fixed;inset:0;z-index:300;display:none;background:rgba(0,0,0,.55);
  align-items:center;justify-content:center;padding:20px}
#tmodal.on{display:flex}
#tmodal .box{background:var(--surface);border:1px solid var(--border);border-radius:15px;padding:20px 22px;
  box-shadow:0 20px 60px rgba(0,0,0,.5);width:min(660px,100%);max-height:90vh;overflow:auto}
#tmodal h2{margin:0 0 14px;font-size:17px;font-weight:800}
#tmodal .grid{display:grid;grid-template-columns:1fr 1fr;gap:11px 14px}
#tmodal label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--ink2)}
#tmodal .row{flex-direction:row;align-items:center;gap:8px}
#tmodal input,#tmodal select,#tmodal textarea{background:var(--surface2);border:1px solid var(--border);
  border-radius:9px;color:var(--ink);font-family:inherit;font-size:14px;padding:9px 11px}
#tmodal input:focus,#tmodal select:focus,#tmodal textarea:focus{outline:2px solid var(--s1);border-color:transparent}
#tmodal textarea{resize:vertical;line-height:1.85;min-height:74px}
#tmodal .wide{grid-column:1/-1}
#tmodal .err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:10px}
#tmodal .acts{display:flex;gap:9px;margin-top:6px}
.smalls{display:grid;grid-template-columns:repeat(auto-fit,minmax(238px,1fr));gap:10px}
.sm{background:var(--surface2);border:1px solid var(--border);border-radius:12px;padding:10px 11px 8px}
.sm .hd{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.sm .hd b{font-size:14.5px;font-weight:800}
.sm .hd i{font-style:normal;color:var(--muted);font-size:11.5px}
.sm .chart{margin:7px 0 5px}
.sm svg{display:block}
.sm .tags{display:flex;flex-wrap:wrap;gap:4px}
.chip{font-size:10.5px;border:1px solid var(--border);border-radius:20px;padding:2px 8px;color:var(--ink2);white-space:nowrap}
.tctl{display:flex;gap:16px;flex-wrap:wrap;align-items:center;font-size:12.5px;color:var(--ink2);margin-bottom:12px}
.tctl label{display:flex;gap:5px;align-items:center;cursor:pointer}
.lgd{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.lgd button{cursor:pointer;background:none;border:1px solid var(--border);border-radius:20px;padding:3px 11px;
  color:var(--ink2);font-family:inherit;font-size:12px;display:flex;align-items:center;gap:6px}
.lgd button.off{opacity:.32}
.lgd i{width:9px;height:9px;border-radius:50%;display:inline-block}
#ttbl{min-width:940px}
#ttbl td.iss{white-space:normal;min-width:300px;line-height:1.8}
#ttbl td.tm{font-variant-numeric:tabular-nums;direction:ltr;text-align:right}
.wflag{color:var(--warning);font-weight:800;cursor:help}
/* نظارت is readable without the key; deleting a finding is not */
body.nomgr #ttbl td .x{display:none}
body.nomgr .mgronly{display:none}
/* عکسِ mgronly: «ارسال فایل» فقط در حالتِ قفل (کارشناس) دیده می‌شود، برای مدیر پنهان است */
body:not(.nomgr) .lockedonly{display:none}
/* کارت‌های #pane-util قانونِ display با ویژگیِ id دارند (#pane-util .ucard/.util-grid) که بر
   قانون‌های کلاسیِ بالا غلبه می‌کند؛ این دو با هم‌ویژگیِ id، قفل/بازِ سطحِ کارت را قطعی می‌کنند */
body.nomgr #pane-util .mgronly{display:none}
body:not(.nomgr) #pane-util .lockedonly{display:none}
/* ---- مالی: the trial balance ---- */
#ftbl table,#fyear table{min-width:720px}
#ftbl td{font-variant-numeric:tabular-nums}
tr.fsec td{background:var(--surface3);font-weight:800;font-size:13.5px;padding-top:11px;padding-bottom:11px}
tr.fg{cursor:default}
tr.fg.has{cursor:pointer}
tr.fg.has:hover{background:var(--surface3)}
tr.fg .ex{display:inline-block;width:16px;color:var(--s1);font-weight:800}
tr.fd td{background:var(--surface2);font-size:12px;color:var(--ink2);padding-top:5px;padding-bottom:5px}
tr.fd td:first-child{padding-right:34px}
tr.fd.note td{color:var(--muted);font-size:11.5px}
tr.ftot td{background:var(--foot);font-weight:800;border-top:2px solid var(--border)}
tr.ftot.big td{font-size:14.5px}
.fnowgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.fnc{background:var(--surface2);border:1px solid var(--border);border-radius:12px;padding:12px 13px;
  position:relative;overflow:hidden}
.fnc::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--accent)}
.fnc .t{font-size:12.5px;color:var(--ink2)}
.fnc .v{font-size:18px;font-weight:800;margin:4px 0 7px;font-variant-numeric:tabular-nums}
.fnc .r{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--ink2);
  border-top:1px solid var(--border);padding-top:6px}
.fnc .r span{display:flex;justify-content:space-between;gap:8px}
.fnc .r b{color:var(--ink);font-variant-numeric:tabular-nums}
.fnet{margin-top:12px;padding:12px 14px;border-radius:11px;font-size:14px;font-weight:700;
  border:1px solid var(--border)}
.fnet b{font-size:16px;font-variant-numeric:tabular-nums}
.fnet.ok{background:color-mix(in srgb,var(--s3) 14%,transparent)}
.fnet.bad{background:color-mix(in srgb,var(--critical) 14%,transparent)}
.fixgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:5px 14px;margin-top:8px}
.fixgrid span{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;color:var(--ink2);
  border-bottom:1px dotted var(--border);padding:4px 0}
.fixgrid i{font-style:normal}
.fixgrid b{color:var(--ink);font-variant-numeric:tabular-nums}
.fixgrid .tot{border-bottom:0;border-top:1px solid var(--border);font-weight:800;color:var(--ink);margin-top:3px}
.fctl{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:14px}
.fctl label{display:flex;flex-direction:column;gap:5px;font-size:11.5px;color:var(--ink2)}
.fctl input{background:var(--surface2);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:14px;padding:8px 11px;width:170px;font-variant-numeric:tabular-nums}
.fctl input:focus{outline:2px solid var(--s1);border-color:transparent}
/* the six-column statements: two sides of three columns, so nothing scrolls */
table.six{min-width:0;width:100%;table-layout:fixed}
table.six th,table.six td{white-space:normal;font-size:12.5px;padding:6px 8px}
table.six td:nth-child(1),table.six td:nth-child(4){width:22%}
table.six td:nth-child(2),table.six td:nth-child(5){width:14%;font-variant-numeric:tabular-nums;text-align:left;direction:ltr}
table.six td:nth-child(3),table.six td:nth-child(6){width:8%;font-variant-numeric:tabular-nums;text-align:left;direction:ltr;color:var(--ink2)}
table.six thead tr:first-child th{background:var(--surface3);font-size:13px;font-weight:800;color:var(--ink)}
table.six thead tr:first-child th:nth-child(2){border-inline-start:2px solid var(--border)}
table.six td:nth-child(4){border-inline-start:2px solid var(--border)}
table.six td.ftot{background:var(--foot);font-weight:800;border-top:1px solid var(--border)}
table.six td.ftot.big{font-size:13.5px}
/* صورت‌ها ▸ افزودن و حذفِ ردیف (۱۴۰۵/۰۷/۱۳) */
#pane-fin td.faddc{padding:3px 6px!important;text-align:start}
#pane-fin button.fadd{font:inherit;font-size:11.5px;padding:2px 10px;border-radius:7px;border:1px dashed var(--border2,rgba(127,127,127,.45));background:none;color:var(--ink2,inherit);cursor:pointer;opacity:.75}
#pane-fin button.fadd:hover{opacity:1;border-style:solid}
#pane-fin button.fdel{font:inherit;font-size:11px;line-height:1;padding:2px 5px;margin-inline-end:5px;border-radius:6px;border:0;background:none;color:var(--critical,#e5484d);cursor:pointer;opacity:.6}
#pane-fin button.fdel:hover{opacity:1}
/* صورت سود و زیان ▸ خانه‌های قابلِ تایپ و نوارِ بازهٔ مالی */
#pane-fin td.fed{cursor:text;background:color-mix(in srgb,var(--s4) 9%,transparent);
  box-shadow:inset 0 -1px 0 color-mix(in srgb,var(--s4) 45%,transparent)}
#pane-fin td.fed:hover{background:color-mix(in srgb,var(--s4) 16%,transparent)}
#pane-fin td.fed:focus{outline:2px solid var(--s4);outline-offset:-2px;background:var(--surface2)}
/* خانهٔ ویرایش‌شده فقط پررنگ می‌شود — رنگِ آبیِ پس‌زمینه به‌خواست مدیر برداشته شد */
#pane-fin td.fed.on{font-weight:800}
#pane-fin td.fedt{text-align:start;direction:rtl}
#pane-fin td.fedt .flab{outline:none;display:inline-block;min-width:55%}
#pane-fin td.fedt .flab:focus{outline:2px solid var(--s4);outline-offset:-2px;background:var(--surface2)}
#pane-fin .fdoc{float:inline-end;font-family:inherit;font-size:10.5px;font-weight:800;cursor:pointer;
  border:1px solid color-mix(in srgb,var(--s1) 45%,var(--border));border-radius:20px;padding:1px 9px;
  background:color-mix(in srgb,var(--s1) 12%,transparent);color:var(--s1);margin-inline-start:6px}
#pane-fin .fdoc:hover{background:var(--s1);color:#fff;border-color:transparent}
/* پنجرهٔ سند — «گزارش شرح حساب»، همان‌طور که در اکسل حسابداری است */
#fdoc{position:fixed;inset:0;z-index:320;display:none;background:rgba(0,0,0,.55);
  align-items:center;justify-content:center;padding:20px}
#fdoc.on{display:flex}
#fdoc .box{background:var(--surface);border:1px solid var(--border);border-radius:15px;
  box-shadow:0 20px 60px rgba(0,0,0,.5);width:min(1060px,100%);max-height:92vh;
  display:flex;flex-direction:column;overflow:hidden}
#fdoc .hd{padding:15px 18px 11px;border-bottom:1px solid var(--border)}
#fdoc h2{margin:0;font-size:16.5px;font-weight:800}
#fdoc .sub{font-size:12px;color:var(--ink2);margin-top:4px}
#fdoc .bar{display:flex;gap:9px;align-items:center;padding:10px 18px;border-bottom:1px solid var(--border)}
#fdoc .bar input{flex:1;background:var(--surface2);border:1px solid var(--border);border-radius:9px;
  color:var(--ink);font-family:inherit;font-size:13px;padding:8px 11px}
#fdoc .bar input:focus{outline:2px solid var(--s1);border-color:transparent}
#fdoc .recon{display:flex;flex-wrap:wrap;gap:8px;padding:11px 18px;border-bottom:1px solid var(--border);
  background:var(--surface2)}
#fdoc .recon span{display:flex;flex-direction:column;gap:2px;border:1px solid var(--border);
  border-radius:10px;padding:6px 12px;background:var(--surface);min-width:150px}
#fdoc .recon i{font-style:normal;font-size:10.5px;color:var(--ink2)}
#fdoc .recon b{font-size:13.5px;font-variant-numeric:tabular-nums;direction:ltr;text-align:end}
#fdoc .recon span.ok{border-color:color-mix(in srgb,var(--s3) 55%,var(--border))}
#fdoc .recon span.ok b{color:var(--s3)}
#fdoc .recon span.bad{border-color:color-mix(in srgb,var(--critical) 55%,var(--border))}
#fdoc .recon span.bad b{color:var(--critical)}
#fdoc .bd{overflow:auto;padding:0 18px 16px}
#fdoc .ft{display:flex;gap:10px;align-items:center;padding:11px 18px;border-top:1px solid var(--border)}
table.fdoctbl{width:100%;border-collapse:collapse;margin-top:10px}
table.fdoctbl th,table.fdoctbl td{border:1px solid var(--border);padding:5px 8px;font-size:12px;
  white-space:nowrap;font-variant-numeric:tabular-nums;text-align:center}
table.fdoctbl thead th{position:sticky;top:0;background:var(--surface3);font-weight:800;z-index:1}
table.fdoctbl td.fds{text-align:start;white-space:normal;min-width:210px;font-variant-numeric:normal}
table.fdoctbl td.fdt{direction:ltr}
table.fdoctbl tbody tr:hover td{background:var(--surface2)}
table.fdoctbl tr.fout td{color:var(--muted);font-style:italic}
table.fdoctbl tfoot td{background:var(--foot);font-weight:800}
.fpctl{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:10px;padding:9px 11px;
  border:1px solid var(--border);border-radius:11px;background:var(--surface2)}
.fpctl .l{font-size:12.5px;font-weight:800;color:var(--ink)}
.fpctl label{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink2)}
.fpctl input{width:104px;background:var(--surface);border:1px solid var(--border);border-radius:8px;
  color:var(--ink);font-family:inherit;font-size:12.5px;padding:6px 8px;text-align:center;
  font-variant-numeric:tabular-nums}
.fpctl input:focus{outline:2px solid var(--s4);border-color:transparent}
.fpctl .fspace{flex:1}
.fpctl .fcnt{font-size:12px}
table.six.sum{margin-top:2px}
table.six.sum td{background:var(--surface3);font-weight:700}
#fpl table,#fclose table,#fopen table,#fcash table{min-width:0}
table.six td.fsub{background:var(--surface3);font-weight:800;color:var(--s1)}
tr.unpaid td{background:color-mix(in srgb,var(--critical) 10%,transparent)}
/* گزارشات ▸ سرمایه اشخاص — the editable contract table */
/* سرویس مدارس ▸ تسویه — جریمهٔ ۱۰٪ زیرِ عددِ همان ردیف */
#schtbl2 .up10{display:block;font-size:10px;font-weight:700;line-height:1.5;margin-top:2px;
  color:var(--critical);opacity:.85;font-variant-numeric:tabular-nums;direction:ltr}
#schft2 .up10{display:block;font-size:10px;font-weight:700;color:var(--critical);opacity:.9}
.hcsum .hcbuilt{display:block;font-size:11.5px;font-weight:700;color:var(--ink2);margin-top:5px;opacity:.9}
#captbl{min-width:1420px}
.acn{font-variant-numeric:tabular-nums;font-size:11.5px;letter-spacing:.2px;white-space:nowrap}
/* تاکسیرانان ▸ کارت‌های واریز */
#cdtbl{min-width:860px}
#cdtbl td{font-variant-numeric:tabular-nums}
#cdtbl td.ced{cursor:text;background:color-mix(in srgb,var(--s1) 5%,transparent)}
#cdtbl td.ced:focus{outline:2px solid var(--s1);outline-offset:-2px;background:var(--surface2)}
#cdtbl td.cusr{background:var(--edited)}
#cdtbl tr.nocard td:first-child{box-shadow:inset 3px 0 0 color-mix(in srgb,var(--muted) 45%,transparent)}
#cdtbl td .acn{display:inline-block;line-height:1.9}
#cdtbl td .acn.shared{color:var(--warning);font-weight:700}
/* a number of the wrong length is shown in full, but wrapped — one bad paste used to
   stretch the whole column off the screen */
#cdtbl td .acn.badlen{color:var(--critical);font-weight:700;white-space:normal;
  word-break:break-all;max-width:230px}
#cdtbl td.ced{max-width:260px;overflow-wrap:anywhere}
#cdtbl tfoot tr.ftot td{position:sticky;bottom:0;z-index:2;background:var(--foot);
  box-shadow:0 -1px 0 var(--border)}
#cdimp{display:none;background:var(--surface2);border:1px solid var(--border);border-radius:12px;
  padding:13px 15px;margin:0 0 12px}
#cdimp.on{display:block}
#cdimp .cap{font-size:12.5px;color:var(--ink2);margin:0 0 9px;line-height:1.9}
#cdimptext{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:10px;
  color:var(--ink);font-family:inherit;font-size:13px;line-height:1.9;padding:10px 12px;resize:vertical;
  font-variant-numeric:tabular-nums}
#cdimptext:focus{outline:2px solid var(--s1);border-color:transparent}
#cdimpMsg .warn{color:var(--warning);font-weight:700}
/* the twelve month boxes — the same marks the workbook keeps, made clickable */
#captbl td.mstrip{white-space:nowrap;padding:5px 8px}
#captbl td.mstrip .mcnt{display:inline-block;min-width:20px;margin-inline-end:7px;
  font-weight:800;font-variant-numeric:tabular-nums;color:var(--muted)}
.mbx{font:inherit;font-size:10.5px;font-weight:700;cursor:pointer;padding:2px 0;width:23px;
  margin-inline-end:2px;border-radius:6px;background:transparent;color:var(--muted);
  border:1px solid var(--border);vertical-align:middle}
.mbx:hover{border-color:var(--s1);color:var(--s1)}
.mbx.on{background:color-mix(in srgb,var(--s1) 30%,transparent);color:var(--s1);
  border-color:color-mix(in srgb,var(--s1) 60%,transparent)}
tr.rvr .mbx.on{background:color-mix(in srgb,var(--s1) 22%,transparent)}
#captbl td.num,#capyear td,#cappeople td{font-variant-numeric:tabular-nums}
#captbl td.ced{cursor:text;background:color-mix(in srgb,var(--s1) 5%,transparent)}
#captbl td.ced:focus{outline:2px solid var(--s1);outline-offset:-2px;background:var(--surface2)}
/* the blue «edited vs Excel» box was removed on request (2026-08-21): `.cusr` no longer
   overrides any background, so an edited cell is drawn exactly like its un-edited neighbour
   — .ced stays faint-blue for every editable data cell (line above), and the month strip
   (td.mstrip) stays clear. The value change is still in the data, just unmarked. */
/* the جمع row rides along at the bottom of the scroller instead of scrolling away */
#captbl tfoot tr.ftot td{position:sticky;bottom:0;z-index:2;background:var(--foot);
  box-shadow:0 -1px 0 var(--border)}
/* per-row actions (مسترد toggle + delete) and the «قرارداد جدید» modal */
#captbl td.capact{white-space:nowrap}
#captbl td.capact button{cursor:pointer;font-family:inherit;font-size:11.5px;font-weight:700;border-radius:8px;
  padding:5px 10px;border:1px solid var(--border);background:var(--surface2);color:var(--ink2);margin-inline-end:5px}
#captbl td.capact .capret:hover{border-color:var(--warning);color:var(--warning)}
#captbl td.capact .capret.on{background:color-mix(in srgb,var(--warning) 22%,transparent);border-color:transparent;color:var(--warning)}
#captbl td.capact .capdel:hover{border-color:var(--critical);color:var(--critical)}
#captbl tr[data-new] td:first-child{box-shadow:inset 3px 0 0 var(--s3)}
#qmodal input.offday{border-color:var(--warning);background:color-mix(in srgb,var(--warning) 12%,transparent)}
#qmodal .offnote{display:block;font-size:11px;font-weight:700;color:var(--warning);margin-top:4px}
#capmodal{position:fixed;inset:0;z-index:300;display:none;background:rgba(0,0,0,.55);align-items:center;justify-content:center;padding:20px}
#capmodal.on{display:flex}
#capmodal .box{background:var(--surface);border:1px solid var(--border);border-radius:15px;padding:20px 22px;
  box-shadow:0 20px 60px rgba(0,0,0,.5);width:min(560px,100%);max-height:90vh;overflow:auto}
#capmodal h2{margin:0 0 14px;font-size:17px;font-weight:800}
#capmodal .grid{display:grid;grid-template-columns:1fr 1fr;gap:11px 14px}
#capmodal label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--ink2)}
#capmodal label.wide{grid-column:1/-1}
#capmodal input,#capmodal select{background:var(--surface2);border:1px solid var(--border);border-radius:9px;
  color:var(--ink);font-family:inherit;font-size:14px;padding:9px 11px}
#capmodal input:focus,#capmodal select:focus{outline:2px solid var(--s1);border-color:transparent}
#capmodal .err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:10px}
#capmodal .err:empty{margin:0;min-height:0}
#capmodal .acts{display:flex;gap:9px;margin-top:8px}
tr.rvr td{background:color-mix(in srgb,var(--muted) 8%,transparent)}
tr.rvr td.ced{background:color-mix(in srgb,var(--muted) 12%,transparent)}
/* refunded-row edited cells carry no special mark either — they fall back to tr.rvr td / td.ced */
.rvb{display:inline-block;font-size:11px;font-weight:700;line-height:1.5;padding:0 6px;
  border-radius:999px;background:color-mix(in srgb,var(--warning) 22%,transparent);
  color:var(--warning);border:1px solid color-mix(in srgb,var(--warning) 45%,transparent);
  margin-inline-start:5px;vertical-align:middle;white-space:nowrap}
#capyear table,#cappeople table{min-width:700px}#fsale table{min-width:820px}
/* گزارشات ▸ سرویس مدارس و آمار شبکه‌ها */
#schtbl{min-width:1420px}#schtbl2{min-width:980px}#nettbl{min-width:640px}
/* a pupil the registration sheet never got, and one who left before the settlement */
#schtbl tr.s2 td{background:color-mix(in srgb,var(--s4) 9%,transparent)}
#schtbl tr.s1 td{background:color-mix(in srgb,var(--muted) 9%,transparent)}
/* the line where the start-of-year figures end and the settlement figures begin */
#schtbl .gsep{border-inline-start:2px solid var(--border)}
#schtbl td.num,#schtbl2 td.num,#nettbl td.num,#schsett td,#schbranch td,#schgrade td,
#schfleet td,#schextra td,#netsum td,#netyear td{font-variant-numeric:tabular-nums}
#schtbl tfoot tr.ftot td,#schtbl2 tfoot tr.ftot td,#nettbl tfoot tr.ftot td{
  position:sticky;bottom:0;z-index:2;background:var(--foot);box-shadow:0 -1px 0 var(--border)}
#schsett td.fsub{background:var(--surface3);font-weight:800;color:var(--s1)}
#schsett table{min-width:420px}#schbranch table,#schgrade table{min-width:660px}
#schfleet table{min-width:820px}#schextra table{min-width:460px}
#netsum table{min-width:720px}#netyear table{min-width:640px}
tr.paidrow td{background:color-mix(in srgb,var(--s6) 8%,transparent)}
/* a refund that has actually gone out — deliberately a different colour from every
   other row state in the file, so it reads at a glance in a 272-row table */
tr.rfp td{background:color-mix(in srgb,var(--s3) 20%,transparent)}
tr.rfp td:first-child{box-shadow:inset 3px 0 0 var(--s3)}
tr.rfp td:last-child{box-shadow:inset -3px 0 0 var(--s3)}
.pbtn{font:inherit;font-size:11.5px;font-weight:700;cursor:pointer;white-space:nowrap;
  padding:2px 9px;border-radius:999px;background:transparent;color:var(--muted);
  border:1px solid var(--border)}
.pbtn:hover{border-color:var(--s3);color:var(--s3)}
.pbtn.on{background:color-mix(in srgb,var(--s3) 28%,transparent);color:var(--s3);
  border-color:color-mix(in srgb,var(--s3) 60%,transparent)}
tr.ngap td{background:color-mix(in srgb,var(--muted) 8%,transparent)}
#netchart svg,#netshare svg,#schchart svg{display:block}
#fsale td{font-variant-numeric:tabular-nums}
.empty{background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);
  padding:52px 28px;text-align:center;margin-top:4px}
.empty .ic{font-size:42px;line-height:1;opacity:.85}
.empty h2{margin:16px 0 8px;font-size:19px;font-weight:800}
.empty p{margin:0 auto;max-width:640px;color:var(--ink2);font-size:13.5px;line-height:2.1}
.empty .rdy{display:inline-block;margin-top:16px;font-size:12.5px;color:var(--muted);
  border:1px dashed var(--border);border-radius:10px;padding:8px 16px}
/* auto-fit so cards stay readable however many there are, wrapping to a second row
   rather than squeezing long labels like «خانم یزدی / صالحی» */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:10px;margin-bottom:14px}
.kpi{background:var(--surface);border:1px solid var(--border);border-radius:13px;padding:12px;box-shadow:var(--shadow);position:relative;overflow:hidden;min-width:0}
.kpi::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--accent,var(--s1))}
.kpi .v{font-size:18px;font-weight:800;letter-spacing:-.02em}
.kpi .l{font-size:12px;color:var(--ink2);margin-top:3px}
.kpi .bd{margin-top:8px;padding-top:7px;border-top:1px solid var(--border);
  display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--ink2)}
.kpi .bd span{display:flex;justify-content:space-between;gap:8px;white-space:nowrap}
.kpi .bd b{color:var(--ink);font-weight:800;font-variant-numeric:tabular-nums}
.bar{background:var(--surface);border:1px solid var(--border);border-radius:13px;padding:12px 14px;margin-bottom:12px;
  display:flex;gap:10px;flex-wrap:wrap;align-items:center;box-shadow:var(--shadow)}
.bar input[type=search]{background:var(--surface2);border:1px solid var(--border);border-radius:10px;color:var(--ink);
  font-family:inherit;font-size:14.5px;padding:9px 13px;min-width:230px;flex:1}
.bar input:focus{outline:2px solid var(--s1);border-color:transparent}
.bar select{background:var(--surface2);border:1px solid var(--border);border-radius:10px;color:var(--ink);font-family:inherit;font-size:13px;padding:9px 11px}
.bar select.flwsel{background:color-mix(in srgb,var(--s3) 12%,var(--surface2));border-color:color-mix(in srgb,var(--s3) 35%,var(--border))}
.count{font-size:12.5px;color:var(--muted);white-space:nowrap}
.tscroll{overflow:auto;max-height:70vh;border:1px solid var(--border);border-radius:13px;background:var(--surface)}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;min-width:1150px}
th,td{padding:7px 9px;border-bottom:1px solid var(--border);white-space:nowrap}
th{color:var(--muted);font-weight:700;font-size:12px;position:sticky;top:0;background:var(--surface3);z-index:3;cursor:pointer;user-select:none;text-align:right}
th:hover{color:var(--ink)}
th.act{color:var(--s1)}
td{text-align:right}
td.num{font-variant-numeric:tabular-nums}
tbody tr:hover{background:var(--surface2)}
td.ed{cursor:text}
td.ed:focus,td.ed .pv:focus{outline:2px solid var(--s1);outline-offset:-2px;background:var(--surface3)}
/* a واریزی built out of recorded deposits is read-only: it is the sum of the list,
   and typing over it would leave the driver's statement disagreeing with the cell */
td.led{cursor:default;box-shadow:inset 2px 0 0 var(--s3)}
td.ro{cursor:not-allowed}
td.ro:hover{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--muted) 45%,transparent)}
th.lockh::after{content:"🔒";font-size:9px;margin-right:4px;opacity:.75}
td.diff{background:color-mix(in srgb,var(--yellow) 55%,transparent)}
td.zeroed{background:color-mix(in srgb,var(--muted) 22%,transparent);color:var(--muted)}
/* An edited cell used to be painted blue. It said only «somebody changed this», with
   no hint of who or when, and after a few rounds most of the table was blue. The
   pointer now answers both questions on any cell, so the colour was noise. The bold
   stays: it still marks a figure that is not the one the source file shipped. */
td.usr{font-weight:700}
.name{white-space:normal;min-width:200px;max-width:280px;font-size:12.5px}
.neg{color:var(--critical)}
td.abnc,th.abnh{background:var(--abn)}
td.abnc{font-weight:700}
td.kk{font-weight:700;cursor:help}
select.cellsel{background:var(--surface2);border:1px solid var(--border);border-radius:7px;color:var(--ink);
  font-family:inherit;font-size:12.5px;padding:3px 6px;max-width:170px;cursor:pointer}
select.cellsel:hover{border-color:var(--muted)}
select.cellsel:focus{outline:2px solid var(--s1);border-color:transparent}
td.srv,th.srvh{background:color-mix(in srgb,var(--s4) 9%,transparent)}
td.fin,tfoot td.fin{background:color-mix(in srgb,var(--s1) 12%,transparent);font-weight:800}
td.fin{cursor:default}
tbody td:first-child{cursor:help}
td.flw,tfoot td.flw{background:color-mix(in srgb,var(--s3) 10%,transparent);min-width:130px}
td.flw.auto{color:var(--ink2);font-style:italic}
tfoot td{position:sticky;bottom:0;background:var(--foot);z-index:2;font-weight:800;
  border-top:2px solid var(--s3);border-bottom:none;font-variant-numeric:tabular-nums}
tfoot td .sl{display:block;font-size:10.5px;color:var(--muted);font-weight:400;margin-top:-2px}
.sumcard{background:var(--surface);border:1px solid var(--border);border-radius:13px;
  padding:14px 17px 6px;box-shadow:var(--shadow);margin-top:16px;overflow-x:auto}
.sumhead{font-weight:800;font-size:14px;margin-bottom:10px}
.sumhead .dim{font-weight:400;font-size:12.5px}
#sumtbl,#acttbl{width:100%;min-width:560px;border-collapse:collapse;font-size:13px}
#sumtbl th,#acttbl th{position:static;background:transparent;color:var(--muted);font-size:11.5px;font-weight:700;
  cursor:default;padding:0 9px 7px;border-bottom:1px solid var(--border);text-align:right}
#sumtbl td,#acttbl td{padding:9px;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums;white-space:nowrap}
#sumtbl tr:last-child td,#acttbl tr:last-child td{border-bottom:none;font-weight:800;border-top:2px solid var(--s3)}
#sumtbl .st,#acttbl .st{font-weight:700;white-space:nowrap}
#sumtbl .chip,#acttbl .chip{display:inline-block;width:11px;height:11px;border-radius:3px;margin-left:7px;vertical-align:-1px;
  border:1px solid rgba(128,128,128,.45)}
#sumtbl .bar,#acttbl .bar{height:5px;border-radius:3px;min-width:2px}
#sumtbl .barcell,#acttbl .barcell{width:24%}
#acttbl .rng{color:var(--muted);font-weight:400;font-size:11.5px}
/* cross-tab */
#xtbl{width:100%;min-width:620px;border-collapse:collapse;font-size:13px;text-align:center}
#xtbl th{position:static;background:transparent;color:var(--muted);font-size:11.5px;font-weight:700;
  cursor:default;padding:0 8px 7px;border-bottom:1px solid var(--border);text-align:center;white-space:nowrap}
#xtbl th.rh{text-align:right}
#xtbl td{padding:9px 8px;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums;white-space:nowrap}
#xtbl td.rh{text-align:right;font-weight:700}
#xtbl tr:last-child td{border-bottom:none;font-weight:800;border-top:2px solid var(--s3)}
#xtbl td.cell{cursor:pointer;border-radius:6px}
#xtbl td.cell:hover{outline:2px solid var(--s1);outline-offset:-2px}
#xtbl td.cell.on{outline:2px solid var(--s1);outline-offset:-2px;font-weight:800}
#xtbl td.z{color:var(--muted);opacity:.45}
#xtbl .chip{display:inline-block;width:11px;height:11px;border-radius:3px;margin-left:7px;vertical-align:-1px;
  border:1px solid rgba(128,128,128,.45)}
#xfchip{display:none;align-items:center;gap:8px;background:var(--s1);color:#fff;border-radius:10px;
  padding:8px 12px;font-size:12.5px;font-weight:700}
#xfchip.on{display:inline-flex}
#xfchip button{background:rgba(0,0,0,.25);border:0;color:#fff;border-radius:6px;cursor:pointer;
  font-family:inherit;font-size:13px;line-height:1;padding:3px 7px}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12.5px;color:var(--ink2);margin:10px 0 0}
.sw{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-1px;margin-left:5px}
.note{background:var(--surface);border:1px solid var(--border);border-right:4px solid var(--warning);border-radius:13px;padding:14px 17px;box-shadow:var(--shadow);margin-top:16px;font-size:13px;color:var(--ink2)}
.note b{color:var(--ink)}
.note ul{margin:8px 0 0;padding:0 18px 0 0}
.note li{margin:4px 0}
.note code{background:var(--surface3);padding:1px 5px;border-radius:5px;font-size:12px}
/* Both hover boxes rise into place instead of appearing; over a dense table the
   movement is what tells the eye that a new box has been drawn. */
@keyframes tipIn{from{opacity:0;transform:translateY(7px) scale(.96)}to{opacity:1;transform:none}}
/* the debt-standing box behind each code - colour carries the status */
#tip{position:fixed;z-index:200;pointer-events:none;display:none;padding:8px 13px;border-radius:9px;
  font-size:12.5px;line-height:1.75;font-weight:600;white-space:nowrap;
  box-shadow:0 6px 26px rgba(0,0,0,.38);border:1px solid rgba(0,0,0,.2);
  animation:tipIn .17s cubic-bezier(.2,.9,.3,1.15)}
#tip b{display:block;font-weight:800;font-size:13px;margin-bottom:1px}
#tip.s-ok  {background:#ffffff;color:#141414}
#tip.s-due {background:#ffd21f;color:#3a2f00}
#tip.s-over{background:#f5811f;color:#331700}
#tip.s-bad {background:#d92222;color:#fff;border-color:rgba(0,0,0,.35)}
#tip.s-note{background:#26262e;color:#f2f1ec;border-color:rgba(255,255,255,.18);
  white-space:normal;max-width:340px;line-height:1.85}
:root[data-theme="light"] #tip.s-note{background:#fffdf2;color:#1a1a1a;border-color:rgba(0,0,0,.22)}
#tip .who{display:block;margin-top:5px;font-size:11px;font-weight:400;opacity:.7}
/* One box for every hover hint in the file. The browser's own tooltip took a second
   to appear, could not be read at this font size and clipped the longer provenance
   lines; this one is drawn by the page, so it looks the same everywhere and shows
   the whole text. Every `title` in the file became a `data-tip` read by this box. */
#gtip{position:fixed;z-index:400;pointer-events:none;opacity:0;visibility:hidden;
  transform:translateY(7px) scale(.96);transform-origin:top right;
  transition:opacity .13s ease,transform .19s cubic-bezier(.2,.9,.3,1.15),visibility .13s;
  max-width:min(380px,86vw);padding:8px 13px;border-radius:10px;text-align:right;
  font-size:12.5px;line-height:1.85;font-weight:600;
  background:linear-gradient(180deg,#2e2e38,#232329);color:#f3f2ee;
  border:1px solid rgba(255,255,255,.17);border-right:3px solid var(--s1,#3987e5);
  box-shadow:0 12px 34px rgba(0,0,0,.46),0 2px 7px rgba(0,0,0,.3)}
#gtip.on{opacity:1;visibility:visible;transform:translateY(0) scale(1)}
#gtip .ln+.ln{margin-top:5px;padding-top:5px;border-top:1px dashed rgba(255,255,255,.16)}
#gtip .ln{display:block}
:root[data-theme="light"] #gtip{background:linear-gradient(180deg,#fffef8,#fdf7e4);color:#1c1c1c;
  border-color:rgba(0,0,0,.16);border-right-color:var(--s1,#3987e5);
  box-shadow:0 12px 30px rgba(0,0,0,.2)}
:root[data-theme="light"] #gtip .ln+.ln{border-top-color:rgba(0,0,0,.16)}
@media (prefers-reduced-motion:reduce){
  #tip{animation:none}
  #gtip{transition:opacity .1s linear,visibility .1s;transform:none}
  #gtip.on{transform:none}
}
/* new-driver form */
#modal,#mmodal,#nmodal,#lmodal,#fmodal,#cardask,#abmodal,#blmodal,#qmodal,#pwmodal{position:fixed;inset:0;z-index:300;display:none;background:rgba(0,0,0,.55);
  align-items:center;justify-content:center;padding:20px}
#modal.on,#mmodal.on,#nmodal.on,#lmodal.on,#fmodal.on,#cardask.on,#abmodal.on,#blmodal.on,#qmodal.on,#pwmodal.on{display:flex}
#modal .box,#mmodal .box,#nmodal .box,#lmodal .box,#fmodal .box,#cardask .box,#abmodal .box,#blmodal .box,#qmodal .box,#pwmodal .box{background:var(--surface);border:1px solid var(--border);border-radius:15px;
  padding:20px 22px;box-shadow:0 20px 60px rgba(0,0,0,.5);width:min(760px,100%);max-height:90vh;overflow:auto}
#modal h2,#mmodal h2,#nmodal h2,#lmodal h2,#fmodal h2,#cardask h2,#abmodal h2,#blmodal h2,#qmodal h2,#pwmodal h2{margin:0 0 14px;font-size:17px;font-weight:800}
/* the manager lock. A box of the page's own rather than the browser's prompt(),
   because a prompt cannot carry the «stay open» tick — and that tick is the whole
   point: the passphrase was being typed several times a day. */
#pwmodal .box{width:min(430px,100%)}
#pwmodal input[type=password]{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  color:var(--ink);font-family:inherit;font-size:15px;padding:10px 12px;width:100%}
#pwmodal input[type=password]:focus{outline:2px solid var(--s1);border-color:transparent}
#pw_keepwrap{display:flex;gap:8px;align-items:flex-start;margin-top:12px;cursor:pointer;
  font-size:12.5px;line-height:1.85;color:var(--ink2)}
#pw_keepwrap input{margin-top:3px;accent-color:var(--s3);flex:0 0 auto}
#pwmodal .err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:9px}
#pwmodal .acts{display:flex;gap:9px;margin-top:6px}
#lmodal .box{width:min(980px,100%)}
#nmodal .box{width:min(560px,100%)}
#n_text{width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  color:var(--ink);font-family:inherit;font-size:14px;line-height:1.8;padding:11px 13px;resize:vertical}
#n_text:focus{outline:2px solid var(--s1);border-color:transparent}
#n_meta{font-size:12px;color:var(--muted);min-height:18px;margin:8px 2px 12px}
/* the note marker beside the driver name */
.nbtn{cursor:pointer;border:0;background:none;font-size:12px;padding:0 4px;opacity:.28;line-height:1;
  filter:grayscale(1)}
.nbtn:hover{opacity:1;filter:none}
.nbtn.has{opacity:1;filter:none}
#m_sum{font-size:13px;color:var(--ink2);line-height:1.9;margin-bottom:12px}
#m_sum b{color:var(--ink)}
#m_sum .ok{color:var(--s3);font-weight:700}
#m_sum .warn{color:var(--warning);font-weight:700}
#m_conf{max-height:44vh;overflow:auto;margin-bottom:14px}
#m_conf table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:0}
#m_conf th{position:static;background:var(--surface3);color:var(--muted);font-size:11px;font-weight:700;
  cursor:default;padding:6px 8px;text-align:right;white-space:nowrap}
#m_conf td{padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap;font-variant-numeric:tabular-nums}
#m_conf .pick{text-align:center}
#m_conf .cap{font-size:12.5px;color:var(--ink2);margin:2px 0 8px}
#m_conf .cap .ok,#m_sum .ok{color:var(--s3);font-weight:700}
/* a conflict where the specialist's entry is the newer one - ticked by default */
#m_conf tr.cnew td{background:color-mix(in srgb,var(--s3) 10%,transparent)}
#m_rej,#m_log,#m_blank,#f_list{max-height:40vh;overflow:auto;margin-bottom:14px}
#m_blank table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:0}
#m_blank th{position:static;background:var(--surface3);color:var(--muted);font-size:11px;font-weight:700;
  cursor:default;padding:6px 8px;text-align:right;white-space:nowrap}
#m_blank td{padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap;
  font-variant-numeric:tabular-nums}
#m_blank .cap{font-size:12.5px;margin:2px 0 8px}
#m_blank .cap.warn{color:var(--warning);font-weight:700}
#m_blank tbody tr td{background:color-mix(in srgb,var(--warning) 8%,transparent)}
#fmodal .box{width:min(880px,100%)}
#cardask .box{width:min(460px,100%)}
#abmodal .box{width:min(520px,100%)}
#blmodal .box{width:min(560px,100%)}
#bl_sum b{color:var(--ink)}
#bl_sum .dim{color:var(--muted)}
#bl_sum .bl-band{background:var(--surface2);border:1px solid var(--border);border-radius:9px;
  padding:7px 11px;margin:7px 0;line-height:1.9}
#bl_sum table{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:11px}
#bl_sum th{background:var(--surface3);color:var(--muted);font-size:11px;font-weight:700;
  padding:6px 8px;text-align:right}
#bl_sum td{padding:6px 8px;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums}
#bl_sum .ok{color:var(--s3);font-weight:700}
#bl_sum .warn{color:var(--warning);font-weight:700}
#abmodal select{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  color:var(--ink);font-family:inherit;font-size:14px;padding:9px 12px;width:100%}
#ab_sum b{color:var(--ink)}
/* charging a month twice is the one mistake here that cannot be seen afterwards —
   the debt is simply larger — so the second run has to be ticked for on purpose */
#ab_again{display:flex;gap:8px;align-items:flex-start;margin:12px 0 4px;padding:10px 12px;
  border:1px solid var(--warning);border-radius:10px;cursor:pointer;
  background:color-mix(in srgb,var(--warning) 10%,transparent);
  font-size:12.5px;line-height:1.85;color:var(--warning);font-weight:700}
#ab_again input{margin-top:4px;accent-color:var(--warning);flex:0 0 auto}
#ab_go.danger{background:var(--critical);border-color:transparent;color:#fff}
#ab_go:disabled{opacity:.45;cursor:not-allowed}
#ab_sum .warn{color:var(--warning);font-weight:700;background:color-mix(in srgb,var(--warning) 12%,transparent);
  border-radius:9px;padding:8px 11px;margin-bottom:9px;line-height:1.85}
#ab_sum .dim{color:var(--muted)}
#cardask input{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  color:var(--ink);font-family:inherit;font-size:14px;padding:9px 12px;width:100%;
  font-variant-numeric:tabular-nums}
#cardask input:focus{outline:2px solid var(--s1);border-color:transparent}
#cardask .err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:10px}
#ca_who{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:9px 12px}
#f_list tbody tr{cursor:pointer}
#f_list tbody tr:hover td{background:color-mix(in srgb,var(--s1) 14%,transparent)}
#f_list tbody tr:first-child td{font-weight:800}
/* a merge that left cells empty spells them out under its own row */
#m_log tr.blrow td{background:color-mix(in srgb,var(--warning) 7%,transparent);white-space:normal}
#m_log tr.blrow .cap{font-size:11.5px;color:var(--warning);font-weight:700;margin:2px 0 6px}
#m_log table.sub{width:auto;min-width:520px;margin-bottom:4px}
#m_log table.sub th{background:transparent;border-bottom:1px solid var(--border)}
#m_log table.sub td{border-bottom:0;padding:4px 8px}
#m_rej table,#m_log table,#f_list table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:0}
#m_rej th,#m_log th,#f_list th{position:static;background:var(--surface3);color:var(--muted);font-size:11px;font-weight:700;
  cursor:default;padding:6px 8px;text-align:right;white-space:nowrap}
#m_rej td,#m_log td,#f_list td{padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap;
  font-variant-numeric:tabular-nums}
#m_rej .cap{font-size:12.5px;margin:2px 0 8px}
#m_rej .cap.warn{color:var(--warning);font-weight:700}
#m_log .dim{font-weight:400;white-space:normal}
/* ---- صورت‌حساب تاکسیران -----------------------------------------------------
   Everything the file knows about one driver's money, in the order the money
   moves. The five figures across the top are the answer; the tables under them
   are the working, and the deposits are the only part that has any. */
#st_code{max-width:220px;font-variant-numeric:tabular-nums}
#st_body .none{color:var(--muted);font-size:13px;padding:14px 2px;line-height:1.9}
#st_body .none.bad{color:var(--critical);font-weight:700}
.sthead{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:13px}
.sthead b{font-size:16px;font-weight:800}
.sthead .chip{font-size:11.5px}
.stkpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:9px;margin-bottom:6px}
.stk{background:var(--surface2);border:1px solid var(--border);border-radius:11px;padding:10px 12px}
.stk .l{font-size:11.5px;color:var(--muted);margin-bottom:3px}
.stk .v{font-size:17px;font-weight:800;font-variant-numeric:tabular-nums}
.stk .v.ok{color:var(--s3)}
.stk .v.bad{color:var(--critical)}
.stk.fin{background:var(--foot);border-color:var(--muted)}
#st_body h3{margin:18px 0 8px;font-size:14px;font-weight:800}
.sttbl{overflow:auto}
.sttbl table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:0}
.sttbl th{position:static;background:var(--surface3);color:var(--muted);font-size:11px;font-weight:700;
  cursor:default;padding:6px 8px;text-align:right;white-space:nowrap}
.sttbl td{padding:7px 8px;border-bottom:1px solid var(--border);white-space:nowrap;
  font-variant-numeric:tabular-nums}
.sttbl tr.open td{background:var(--surface2);color:var(--ink2)}
.sttbl tr.sum td{background:var(--foot);font-weight:800;border-bottom:0}
.sttbl table.led td.desc{white-space:normal;min-width:180px}
.sttbl table.led td.sd{text-align:center;font-weight:700;color:var(--muted)}
.sttbl .x{cursor:pointer;color:var(--critical);font-weight:800;padding:1px 6px;border-radius:5px}
.sttbl .x:hover{background:color-mix(in srgb,var(--critical) 28%,transparent)}
/* ویرایشِ درجای یک واریزی در صورت‌حساب */
.sttbl .e{cursor:pointer;color:#2f80d8;font-weight:800;padding:1px 6px;border-radius:5px}
.sttbl .e:hover{background:color-mix(in srgb,#2f80d8 26%,transparent)}
.sttbl .e.ok{color:#15a34a}
.sttbl .e.ok:hover{background:color-mix(in srgb,#15a34a 26%,transparent)}
.sttbl tr.edrow td{background:color-mix(in srgb,#2f80d8 9%,transparent)}
.sttbl .edin{width:100%;max-width:130px;font:inherit;padding:4px 7px;border:1px solid #2f80d8;
  border-radius:6px;background:var(--surface);color:var(--ink);text-align:center;font-variant-numeric:tabular-nums}
/* ---- ثبت واریز گروهی --------------------------------------------------------
   Built for a sitting with a bank statement open beside the screen: the date once
   at the top, then code and amount over and over without the hand leaving the
   keyboard. The name under the code is the guard against filing against the
   wrong driver, so it gets the size and the weight. */
#qmodal .box{width:min(820px,100%)}
#qmodal .cap{font-size:12.5px;color:var(--ink2);line-height:1.9;margin:0 0 12px}
#qmodal .cap b{color:var(--ink)}
.qform{display:grid;grid-template-columns:1fr 1fr 1.3fr auto;gap:9px;align-items:end;
  background:var(--surface2);border:1px solid var(--border);border-radius:11px;padding:11px 12px}
.qform label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink2)}
.qform input{background:var(--surface);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:15px;padding:9px 11px;width:100%;font-variant-numeric:tabular-nums}
.qform input:focus{outline:2px solid var(--s1);border-color:transparent}
.qform input::placeholder{color:var(--muted);font-size:12px}
#q_who{min-height:26px;margin:11px 2px 0;font-size:13.5px;line-height:1.9}
#q_who b{font-weight:800}
#q_who .dim{color:var(--muted)}
#q_who .bad,#q_prev .bad{color:var(--critical);font-weight:700}
#q_prev .ok{color:var(--s3);font-weight:700}
#q_err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin:4px 2px 0;line-height:1.9}
/* a duplicate is a question, not a refusal — it gets the warning colour, not the red */
#q_err.warn{color:var(--warning)}
#q_log,#q_prev{max-height:30vh;overflow:auto;margin-top:10px}
#q_log table,#q_prev table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:0}
#q_log th,#q_prev th{position:static;background:var(--surface3);color:var(--muted);font-size:11px;
  font-weight:700;cursor:default;padding:6px 8px;text-align:right;white-space:nowrap}
#q_log td,#q_prev td{padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap;
  font-variant-numeric:tabular-nums}
#q_log tr.gone td{opacity:.45;text-decoration:line-through}
#q_prev tr.badrow td{background:color-mix(in srgb,var(--critical) 10%,transparent);text-decoration:none}
#q_log .x{cursor:pointer;color:var(--s3);font-weight:800;font-size:13px;padding:1px 6px;border-radius:5px}
#q_log .x:hover{background:color-mix(in srgb,var(--s3) 28%,transparent)}
.qsum{font-size:12.5px;color:var(--ink2);font-weight:700;padding:8px 2px 2px}
/* ---- یادداشت‌های مهم ---------------------------------------------------------
   A day book, not a text box. Writing has to cost one line and one Enter, or it
   does not get written at all; everything else — a due date, a category, the code
   it is about — is offered but never demanded. What is written then behaves like
   work rather than text: it can be finished, it can fall overdue, and while it is
   overdue it counts itself on the tab so it is not forgotten by being unvisited. */
.tbadge{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;
  margin-inline-start:7px;border-radius:9px;background:var(--critical);color:#fff;
  font-size:11px;font-weight:800;vertical-align:1px;font-variant-numeric:tabular-nums}
.mocap textarea{width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:11px;
  color:var(--ink);font-family:inherit;font-size:14.5px;line-height:1.9;padding:11px 13px;resize:vertical}
.mocap textarea:focus{outline:2px solid var(--s1);border-color:transparent}
.moform{display:grid;grid-template-columns:1fr 1fr 1fr auto auto;gap:9px;align-items:end;margin-top:10px}
.moform label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink2)}
.moform input,.moform select{background:var(--surface2);border:1px solid var(--border);border-radius:9px;
  color:var(--ink);font-family:inherit;font-size:13.5px;padding:8px 10px;width:100%}
#mo_cat{border-color:color-mix(in srgb,var(--cat,var(--muted)) 55%,var(--border));
  background:color-mix(in srgb,var(--cat,var(--muted)) 14%,var(--surface2));font-weight:700}
.moform input:focus,.moform select:focus{outline:2px solid var(--s1);border-color:transparent}
.mostar{font-size:16px;line-height:1;padding:8px 12px}
.mostar.on{background:var(--s4);border-color:transparent;color:#1a1200}
#mo_err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:9px}
#mo_err.ok{color:var(--s3)}
#mo_q{min-width:230px}
/* the day heading, and the notes under it */
.moday{display:flex;align-items:center;gap:10px;margin:18px 2px 9px}
.moday b{font-size:14px;font-weight:800}
.moday i{font-style:normal;color:var(--muted);font-size:12px}
.moday::after{content:"";flex:1;height:1px;background:var(--border)}
.moday.today b{background:linear-gradient(135deg,var(--s1),var(--s6));color:#fff;
  padding:2px 12px;border-radius:20px;font-size:13px}
/* Each card is washed with its own category colour — the edge, the surface and the
   chip all mixed from one hue — so a page of notes can be read by colour before it
   is read by word. Red and green are left out of the categories on purpose: they
   are spent here on «سررسید گذشته» and «انجام شد». */
.mo{display:flex;gap:11px;align-items:flex-start;border-radius:12px;padding:11px 13px;
  margin-bottom:8px;box-shadow:var(--shadow);transition:background .16s ease,transform .12s ease;
  background:color-mix(in srgb,var(--cat,var(--muted)) 10%,var(--surface));
  border:1px solid color-mix(in srgb,var(--cat,var(--muted)) 32%,var(--border));
  border-inline-start:4px solid var(--cat,var(--muted))}
.mo:hover{background:color-mix(in srgb,var(--cat,var(--muted)) 17%,var(--surface))}
.mo.star{box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--s4) 65%,transparent),var(--shadow)}
.mo.now{border-inline-start-color:var(--warning)}
.mo.late{border-inline-start-color:var(--critical);
  background:color-mix(in srgb,var(--critical) 13%,var(--surface));
  border-color:color-mix(in srgb,var(--critical) 45%,var(--border))}
.mo.late:hover{background:color-mix(in srgb,var(--critical) 19%,var(--surface))}
.mo.done{opacity:.5;background:var(--surface);border-inline-start-color:var(--muted);
  border-color:var(--border);box-shadow:none}
.mo.done .mtxt{text-decoration:line-through}
.mo .mchk{cursor:pointer;flex:0 0 auto;width:19px;height:19px;border-radius:6px;margin-top:2px;
  border:1.5px solid var(--muted);display:grid;place-items:center;font-size:12px;color:transparent}
.mo .mchk:hover{border-color:var(--s3)}
.mo.done .mchk{background:var(--s3);border-color:transparent;color:#fff}
.mo .mbody{flex:1 1 auto;min-width:0}
.mtxt{font-size:14px;line-height:1.9;white-space:pre-wrap;word-break:break-word}
.mmeta{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin-top:7px;font-size:11.5px;color:var(--muted)}
.mmeta .chip{border:1px solid var(--border);border-radius:20px;padding:2px 9px;white-space:nowrap}
.mmeta .cat{border-color:transparent;background:var(--cat);color:#fff;font-weight:800;
  letter-spacing:-.01em;box-shadow:0 1px 3px color-mix(in srgb,var(--cat) 50%,transparent)}
.mmeta .due{border-color:transparent;background:var(--surface3)}
.mmeta .due.late{background:color-mix(in srgb,var(--critical) 24%,transparent);color:var(--critical);font-weight:700}
.mmeta .due.now{background:color-mix(in srgb,var(--warning) 26%,transparent);color:var(--warning);font-weight:700}
.mmeta .desc{border-color:var(--border);color:var(--ink2);white-space:normal;max-width:100%}
.mo .mact{display:flex;gap:4px;flex:0 0 auto}
.mo .mact span{cursor:pointer;padding:2px 6px;border-radius:6px;font-size:13px;line-height:1.4}
.mo .mstar{color:var(--muted)}
.mo .mstar.on{color:var(--s4)}
.mo .mstar:hover{background:color-mix(in srgb,var(--s4) 22%,transparent)}
.mo .mdel{color:var(--critical)}
.mo .mdel:hover{background:color-mix(in srgb,var(--critical) 22%,transparent)}
.mo .medit:hover{background:var(--surface3)}
.mempty{text-align:center;color:var(--muted);padding:44px 0;font-size:13.5px;line-height:2}
.mempty .ic{font-size:30px;opacity:.5}
/* ---- ربات بله ----------------------------------------------------------------
   The token is a credential living on one machine. It is masked once saved, kept out
   of the کارشناسان file, and never written into a report — but anyone who opens this
   file on this computer can read it back, which is said out loud in the panel. */
.baleform{display:grid;grid-template-columns:1.6fr 1fr 1fr .8fr;gap:9px;align-items:end;
  background:var(--surface2);border:1px solid var(--border);border-radius:11px;padding:11px 12px}
.baleform label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink2)}
.baleform .req{color:var(--critical)}
.baleform input,.baleform select{background:var(--surface);border:1px solid var(--border);
  border-radius:9px;color:var(--ink);font-family:inherit;font-size:13.5px;padding:8px 10px;width:100%}
.baleform input:focus,.baleform select:focus{outline:2px solid var(--s1);border-color:transparent}
.baleform input::placeholder{color:var(--muted);font-size:11.5px}
#bl_tok{font-variant-numeric:tabular-nums;letter-spacing:.02em}
.baleadd{display:grid;grid-template-columns:1fr 1.4fr auto;gap:9px;align-items:end;margin-top:10px;
  background:var(--surface2);border:1px solid var(--border);border-radius:11px;padding:11px 12px}
.baleadd label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink2)}
.baleadd .req{color:var(--critical)}
.baleadd input{background:var(--surface);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:13.5px;padding:8px 10px;width:100%;font-variant-numeric:tabular-nums}
.baleadd input:focus{outline:2px solid var(--s1);border-color:transparent}
.baleadd input::placeholder{color:var(--muted);font-size:11.5px}
#bl_mgrs{margin-top:10px;overflow:auto}
#bl_mgrs table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:0}
#bl_mgrs th{position:static;background:var(--surface3);color:var(--muted);font-size:11px;font-weight:700;
  cursor:default;padding:6px 8px;text-align:right;white-space:nowrap}
#bl_mgrs td{padding:6px 8px;border-bottom:1px solid var(--border);white-space:nowrap;
  font-variant-numeric:tabular-nums}
#bl_mgrs input.cid{background:var(--surface2);border:1px solid var(--border);border-radius:7px;
  color:var(--ink);font-family:inherit;font-size:12.5px;padding:4px 8px;width:130px;
  font-variant-numeric:tabular-nums}
#bl_mgrs input.cid:focus{outline:2px solid var(--s1);border-color:transparent}
#bl_mgrs .ready{color:var(--s3);font-weight:700}
#bl_mgrs .waiting{color:var(--warning);font-weight:700}
#bl_mgrs .x{cursor:pointer;color:var(--critical);font-weight:800;padding:1px 6px;border-radius:5px}
#bl_mgrs .x:hover{background:color-mix(in srgb,var(--critical) 28%,transparent)}
#bl_mgrs .none{color:var(--muted);padding:12px 2px}
.baleacts{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}
#bl_err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:9px}
#bl_err.ok{color:var(--s3)}
#bl_state{font-size:12.5px;color:var(--ink2);line-height:2;margin-top:8px}
#bl_state .on{color:var(--s3);font-weight:700}
#bl_state .off{color:var(--muted)}
#bl_help{background:var(--surface2);border:1px solid var(--border);border-radius:11px;
  padding:12px 14px;margin-top:11px;font-size:12.5px;line-height:2;color:var(--ink2)}
#bl_help b{color:var(--ink)}
#bl_help ol{margin:6px 0 0;padding:0 18px 0 0}
#bl_help li{margin:5px 0}
#bl_help code{background:var(--surface3);padding:1px 6px;border-radius:5px;font-size:12px;
  direction:ltr;display:inline-block;unicode-bidi:bidi-override}
/* ---- آمار شبکه‌ها: recording a fresh count -----------------------------------
   The workbook ended at ۱۴۰۵/۰۵/۱۸. Counts carry on being taken, so they are typed
   in here and join the baked ones — same table, same charts, marked as yours. */
.netform{display:grid;grid-template-columns:1.4fr repeat(4,1fr) auto;gap:9px;align-items:end;
  background:var(--surface2);border:1px solid var(--border);border-radius:11px;
  padding:11px 12px;margin:0 0 10px}
.netform label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink2)}
.netform .req{color:var(--critical)}
.netform input{background:var(--surface);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:13.5px;padding:8px 10px;width:100%;font-variant-numeric:tabular-nums}
.netform input:focus{outline:2px solid var(--s1);border-color:transparent}
.netform input::placeholder{color:var(--muted);font-size:11.5px}
#nf_err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin:0 2px 6px;line-height:1.9}
#nf_err.ok{color:var(--s3)}
#nettbl tr.nmine td:first-child{box-shadow:inset 3px 0 0 var(--s3)}
#nettbl .nx{cursor:pointer;color:var(--critical);font-weight:800;font-size:11px;
  padding:1px 5px;border-radius:5px;margin-right:6px}
#nettbl .nx:hover{background:color-mix(in srgb,var(--critical) 28%,transparent)}
/* the score, with the bar behind it so the gaps between people are seen not read */
.stfsc{position:relative;display:inline-block;min-width:52px;padding:2px 7px;border-radius:6px;
  font-weight:800;font-variant-numeric:tabular-nums;text-align:center;z-index:0}
.stfsc::before{content:"";position:absolute;inset:0;right:auto;width:var(--p,0);z-index:-1;
  background:color-mix(in srgb,var(--s3) 42%,transparent);border-radius:6px}
#q_bulk{margin-top:14px;border:1px solid var(--border);border-radius:11px;padding:10px 12px;
  background:var(--surface2)}
#q_bulk summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--ink2)}
#q_bulk summary:hover{color:var(--ink)}
#q_bulk .cap{margin:10px 0 8px}
.qfile{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:11px}
#q_fname{font-size:12px}
#q_fname.ok{color:var(--s3);font-weight:700}
#q_fname.bad{color:var(--critical);font-weight:700}
#q_warn{background:color-mix(in srgb,var(--warning) 13%,transparent);border:1px solid var(--border);
  border-radius:10px;padding:9px 12px;margin:0 0 10px;font-size:12.5px;line-height:1.9;
  color:var(--warning);font-weight:700}
.qmap{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.qmap label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--ink2)}
.qmap select{background:var(--surface);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:12.5px;padding:8px 10px;width:100%}
.qmap select:focus{outline:2px solid var(--s1);border-color:transparent}
#q_text{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:10px;
  color:var(--ink);font-family:inherit;font-size:13.5px;line-height:1.9;padding:10px 12px;
  resize:vertical;font-variant-numeric:tabular-nums}
#q_text:focus{outline:2px solid var(--s1);border-color:transparent}
#qmodal .acts{display:flex;gap:9px;flex-wrap:wrap;align-items:center;margin-top:12px}
#qmodal .acts .rt{margin-right:auto}
.qkeys{font-size:11.5px;color:var(--muted)}
.kb{font-size:10.5px;opacity:.62;border:1px solid var(--border);border-radius:5px;padding:1px 5px;
  margin-right:5px;font-variant-numeric:tabular-nums}
/* the ledger marker inside the واریزی cell */
/* The statement handed to the driver: a گردش حساب with بدهکار and بستانکار columns
   and the balance after every line. Printed on its own — everything else on the page
   is hidden — so what leaves the printer is one clean page with room to sign. */
#stmt{display:none}
@media print{
  /* margin:0 on the page box is what removes the browser's own header and footer —
     the file name, the URL and the system clock it prints above the sheet. With no
     margin left there is nowhere for them to be drawn. The white space the page
     still needs then comes from the padding below, not from the page box. */
  @page{size:A4;margin:0}
  body>*{display:none!important}
  /* the on-screen accent glow is a body::before (a pseudo-element, so body>* can't
     hide it) and a fixed layer — on paper it washed the whole statement in colour.
     Kill it, and blank the page's own tint, so the print stays clean white. */
  body::before{display:none!important;background:none!important}
  body{background:#fff!important}
  /* one page tall, laid out as a column, so the closing lines can be pushed to the
     foot of the sheet instead of sitting wherever the table happens to end */
  body #stmt{display:flex!important;flex-direction:column;color:#000;background:#fff;
    font-size:11pt;line-height:1.8;padding:14mm 12mm;
    min-height:100vh;box-sizing:border-box}
  /* letterhead: company mark on the right where the page starts, network mark on
     the left, title held between them. The marks are exported on an A4 canvas with
     white space around them, so they are sized by height and left uncropped —
     white on white shows nothing. */
  #stmt .sthd{display:flex;align-items:center;justify-content:space-between;gap:14px;
    border-bottom:2.5px solid #000;padding-bottom:9px}
  #stmt .sthd img{height:24mm;width:auto;flex:0 0 auto}
  #stmt .sthd .ph{width:24mm;flex:0 0 auto}
  #stmt .sthd .ttl{text-align:center;flex:1 1 auto}
  #stmt .sthd .t{font-size:18pt;font-weight:800;letter-spacing:-.01em}
  #stmt .sthd .t2{font-size:12.5pt;font-weight:700;color:#222;margin-top:2px}
  #stmt .stsub{text-align:center;font-size:10.5pt;color:#333;margin:7px 0 14px}
  /* the page-wide `table{min-width:1150px}` is for the on-screen ledger; on paper it
     would push half the columns off the sheet */
  #stmt table{width:100%;min-width:0;border-collapse:collapse}
  /* auto layout, not fixed: the labels differ a lot in length — «کد تاکسیران» beside
     «رتبهٔ عملکرد تاکسیران» — and fixed columns cut the long ones off mid-word */
  #stmt table.who{margin-bottom:12px;font-size:10pt}
  #stmt table.who td{border:1px solid #bbb;padding:6px 9px;text-align:center;white-space:nowrap}
  #stmt table.who td:nth-child(odd){background:#f2f2f2;color:#333}
  #stmt table.who td:nth-child(even){font-weight:700}
  #stmt table.who .q{font-weight:400;color:#777}
  /* fixed widths rather than whatever the content asks for: three money columns and
     a date will not fit an A4 line if شرح is allowed to push them off the page */
  #stmt table.led{font-size:10pt;table-layout:fixed}
  #stmt table.led thead{display:table-header-group}     /* the head repeats on page two */
  #stmt table.led th:nth-child(1),#stmt table.led td:nth-child(1){width:6%}
  #stmt table.led th:nth-child(2),#stmt table.led td:nth-child(2){width:14%}
  #stmt table.led th:nth-child(3),#stmt table.led td:nth-child(3){width:22%}
  #stmt table.led th:nth-child(4),#stmt table.led td:nth-child(4){width:16%}
  #stmt table.led th:nth-child(5),#stmt table.led td:nth-child(5){width:16%}
  #stmt table.led th:nth-child(6),#stmt table.led td:nth-child(6){width:9%}
  #stmt table.led th:nth-child(7),#stmt table.led td:nth-child(7){width:17%}
  #stmt table.led th,#stmt table.led td{border:1px solid #999;padding:5px 7px;text-align:center;
    white-space:nowrap;overflow:hidden}
  #stmt table.led th{background:#e8e8e8;font-weight:800}
  /* the on-screen refresh tints every th with the section accent and spaces its
     letters; on the statement that must stay flat black on grey */
  #stmt th{color:#000!important;letter-spacing:normal;border-bottom:1px solid #999}
  #stmt table.led td.desc{white-space:normal}
  #stmt table.led td.sd{font-weight:700}
  #stmt table.led tbody tr:nth-child(even) td{background:#fafafa}
  #stmt table.led tr.open td{background:#f4f4f4;color:#333}
  #stmt table.led tr.sum td{background:#e8e8e8;font-weight:800}
  #stmt .fin{margin-top:12px;font-size:12.5pt;font-weight:800;border:2px solid #000;
    border-radius:4px;padding:8px 12px;display:inline-block}
  /* one signature block, on the left where the second one used to sit */
  #stmt .foot{display:flex;justify-content:flex-end;margin-top:46px;font-size:10pt;color:#222}
  #stmt .foot span{border-top:1px dotted #666;padding-top:6px;width:38%;text-align:center}
  #stmt .note2{margin-top:auto;font-size:9pt;color:#555;text-align:center;
    border-top:1px solid #ccc;padding-top:7px}
  /* A phone number is read left to right whatever the page direction. Isolating it
     is not enough — Persian digits are «Arabic number» to the bidi algorithm and a
     run of them keeps its own order — so the order is overridden outright, which
     for a string of digits is exactly what is wanted. */
  #stmt .tel{direction:ltr;unicode-bidi:bidi-override;display:inline-block}
  #stmt tr{break-inside:avoid}
}
#modal .grid{display:grid;grid-template-columns:1fr 1fr;gap:11px 14px}
#modal label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--ink2)}
#modal .req{color:var(--critical)}
#modal input{background:var(--surface2);border:1px solid var(--border);border-radius:9px;color:var(--ink);
  font-family:inherit;font-size:14px;padding:9px 11px}
#modal input:focus{outline:2px solid var(--s1);border-color:transparent}
#modal input::placeholder{color:var(--muted);font-size:12px}
#modal .err{color:var(--critical);font-size:12.5px;font-weight:700;min-height:19px;margin-top:10px}
#modal .acts{display:flex;gap:9px;justify-content:flex-start;margin-top:6px}
tbody tr.newrow td:first-child{box-shadow:inset 3px 0 0 var(--s3)}
tbody tr.vacated td{opacity:.5}
tbody tr.vacated td:first-child{opacity:1;box-shadow:inset 3px 0 0 var(--muted)}
/* کدِ تخلیه‌شده: سلولِ نام/یادداشت روشن می‌ماند تا نشانِ 📝 محو نشود؛ خودِ نام و
   نام‌خانوادگی با .vacname خیلی کم‌رنگ نگه داشته می‌شود تا در صورت لزوم معلوم باشد
   چه کسی بوده. بقیهٔ ستون‌های ردیف کم‌رنگ (۰٫۵) می‌مانند. */
tbody tr.vacated td:has(.nbtn){opacity:1}
tbody tr.vacated .vacname{opacity:.32;font-style:italic;font-weight:400;color:var(--muted)}
/* A vacated code that still owes money keeps its ماندهٔ نهایی بدهی visible, at exactly
   the weight the name is kept at — the code is gone but the debt is not, and a blank
   cell said the opposite. Styled on the TD rather than an inner span, so nothing that
   rewrites the cell's text can silently un-fade the number. */
tbody tr.vacated td.vacdebt{opacity:.32;font-style:italic;color:var(--muted)}
tbody td .x,tbody td .undo{cursor:pointer;font-weight:800;font-size:11px;
  padding:1px 5px;border-radius:5px;margin-right:5px}
tbody td .x{color:var(--critical)}
tbody td .x:hover{background:color-mix(in srgb,var(--critical) 28%,transparent)}
tbody td .undo{color:var(--s3);font-size:13px}
tbody td .undo:hover{background:color-mix(in srgb,var(--s3) 30%,transparent)}
#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(80px);background:var(--s3);color:#fff;
  padding:11px 20px;border-radius:11px;font-size:14px;font-weight:700;box-shadow:var(--shadow);transition:transform .22s;z-index:99;
  white-space:pre-line;text-align:center;line-height:1.75;max-width:min(520px,92vw)}
#toast.on{transform:translateX(-50%) translateY(0)}


/* ===== a livelier environment — per-section accent + polish (2026-08) =========
   Every tab sets --accent (JS in showPane); the shared chrome reads it, so the whole
   workbench takes on that section's colour as you move around. Tints stay light so the
   dense data views keep their contrast. */
:root{--accent:#12a074}                 /* default = آبونمان teal until a tab sets it */

/* the whole page takes on the active tab's colour — a full accent wash, strongest up
   by the tabs/logo and still clearly present across the rest, shifting as you move */
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(135% 95% at 100% -8%, color-mix(in srgb,var(--accent) 32%,transparent), transparent 72%),
    radial-gradient(90% 70% at 0% 8%, color-mix(in srgb,var(--accent) 16%,transparent), transparent 60%),
    linear-gradient(165deg, color-mix(in srgb,var(--accent) 17%,transparent), color-mix(in srgb,var(--accent) 9%,transparent) 75%);
  transition:background .5s ease}
.wrap{position:relative;z-index:1}

/* header — an accent hairline, a colour-matched logo and a coloured section name */
header.top{border-bottom:1px solid color-mix(in srgb,var(--accent) 22%,var(--border))}
.logo{background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 52%,#0a0a0a));
  box-shadow:0 7px 20px -7px var(--accent),var(--shadow);transition:background .45s,box-shadow .45s}
#secname{color:var(--accent);font-weight:800;letter-spacing:-.01em}
h1{font-size:23px;letter-spacing:-.02em}

/* the tab bar comes alive — the active tab fills with its accent over a gradient rail */
.tabs{gap:7px;padding-bottom:16px;border-bottom:1px solid color-mix(in srgb,var(--accent) 16%,var(--border))}
.tabs button{transition:transform .15s,background .15s,color .15s,border-color .15s}
.tabs button:not(.on):hover{transform:translateY(-1px)}
/* color-mix() fails on a <button>'s own background in this engine, but var() works —
   so the active tab is outlined in its section colour rather than tinted. */
.tabs button.on{background:var(--surface);border:1px solid var(--accent);color:var(--ink);box-shadow:var(--shadow)}
.tabs button.on::after{background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 45%,transparent));
  height:3px;border-radius:3px;bottom:-17px}
.subtabs button.on{background:var(--accent);border-color:transparent;box-shadow:0 4px 12px -5px var(--accent)}
.subtabs button:not(.on):hover{transform:translateY(-1px)}

/* tables — accent-tinted sticky header, matching hover, and a whisper of zebra */
th{background:color-mix(in srgb,var(--accent) 11%,var(--surface3));
  border-bottom:2px solid color-mix(in srgb,var(--accent) 34%,var(--border));
  color:color-mix(in srgb,var(--accent) 52%,var(--ink2));letter-spacing:.2px}
tbody tr{transition:background .12s}
tbody tr:nth-child(2n) td{background:color-mix(in srgb,var(--accent) 3.5%,transparent)}
tbody tr:hover td{background:color-mix(in srgb,var(--accent) 9%,transparent)}
.tscroll{border-color:color-mix(in srgb,var(--accent) 16%,var(--border));
  box-shadow:0 12px 34px -22px color-mix(in srgb,var(--accent) 70%,#000)}

/* cards get a touch more depth and an accent-aware edge */
.kpi{border-color:color-mix(in srgb,var(--accent) 16%,var(--border))}
.sumcard,.bar{border-color:color-mix(in srgb,var(--accent) 12%,var(--border))}
.sumhead{letter-spacing:-.01em}
.count,.legend{letter-spacing:.15px}
.btn.p{background:var(--accent);box-shadow:0 4px 12px -5px var(--accent)}
.btn.p:hover{opacity:.92}

@media(prefers-reduced-motion:reduce){*{transition:none!important}}

  
    .hclock{display:inline-flex;align-items:center;gap:9px;font-variant-numeric:tabular-nums;
      background:var(--surface);border:1px solid color-mix(in srgb,var(--accent) 30%,var(--border));
      border-radius:12px;padding:7px 14px;box-shadow:0 1px 3px rgba(0,0,0,.06)}
    .hclock .cwd{font-weight:800;color:var(--accent)}
    .hclock .cdate{color:var(--ink2);font-weight:700}
    .hclock .csep{width:1px;height:16px;background:var(--border)}
    .hclock .ctime{font-weight:800;color:var(--fg);font-size:15px;letter-spacing:.6px;direction:ltr}
    @media (max-width:640px){ .hclock{padding:6px 10px;gap:6px;font-size:12px} .hclock .ctime{font-size:13px} }
  
