/* DEMS design system.
   Bengali-first: Noto Sans Bengali leads the stack, line-height is generous
   because Bengali conjuncts need vertical room, and nothing relies on colour
   alone to carry meaning. */

:root{
  /* R94: palette tokens -- every colour used below comes from here (dark mode overrides them). */
  --on-accent:#fff;
  --shimmer:rgb(255 255 255 / .6);
  --c-amber-200:#f0d9a8;
  --c-amber-300:#f0c96b;
  --c-amber-300-2:#ffd166;
  --c-amber-450:#fbbf24;
  --c-amber-50:#fdf6e7;
  --c-amber-50-2:#fff8e6;
  --c-blue-450:#2563eb;
  --c-blue-50:#eef4ff;
  --c-blue-500:#1d4ed8;
  --c-blue-650:#475569;
  --c-cyan-100:#e4ecee;
  --c-cyan-100-2:#e6eeef;
  --c-cyan-150:#d3dfe3;
  --c-cyan-250:#b4c4c8;
  --c-cyan-350:#9aabb0;
  --c-cyan-400:#38bdf8;
  --c-cyan-500:#0ea5e9;
  --c-cyan-850:#093c42;
  --c-cyan-900:#0f2a2e;
  --c-gray-400:#999999;
  --c-gray-600:#666666;
  --c-gray-650:#555555;
  --c-green-150:#c5e6ce;
  --c-green-50:#eef8f1;
  --c-green-50-2:#f0faf3;
  --c-green-550:#22c55e;
  --c-green-600:#1baf7a;
  --c-green-650:#1f9d6b;
  --c-green-650-2:#16a34a;
  --c-green-700:#15803d;
  --c-green-750:#14603a;
  --c-indigo-250:#a78bfa;
  --c-mist-350:#9aa9ab;
  --c-mist-50:#eef5f5;
  --c-mist-50-10:#f4f8f8;
  --c-mist-50-11:#f7fbfb;
  --c-mist-50-12:#f7fafa;
  --c-mist-50-13:#f6f9f9;
  --c-mist-50-14:#eef3f4;
  --c-mist-50-15:#eef6f6;
  --c-mist-50-2:#f8fbfb;
  --c-mist-50-3:#e9f2f2;
  --c-mist-50-4:#eef3f3;
  --c-mist-50-5:#fbfdfd;
  --c-mist-50-6:#f3f7f8;
  --c-mist-50-7:#f2f8f8;
  --c-mist-50-8:#e9f1f3;
  --c-mist-50-9:#fafcfc;
  --c-mist-500:#6c8489;
  --c-mist-550:#6b7280;
  --c-orange-150:#f3dfb8;
  --c-orange-350:#ef8354;
  --c-orange-450:#eb6834;
  --c-orange-450-2:#e9a23b;
  --c-orange-50:#fff8eb;
  --c-orange-50-2:#fef3e2;
  --c-orange-50-3:#fdf3e1;
  --c-orange-50-4:#fdf5e6;
  --c-orange-500:#f59e0b;
  --c-orange-550:#d97706;
  --c-orange-600:#c2410c;
  --c-orange-650:#b45309;
  --c-orange-750:#7a2e0e;
  --c-orange-750-2:#7a4d00;
  --c-orange-850:#3b1d0a;
  --c-orange-900:#3b2500;
  --c-pink-300:#f472b6;
  --c-pink-400:#ec4899;
  --c-pink-50:#fdf0f6;
  --c-pink-500:#db2777;
  --c-pink-650:#9f1239;
  --c-red-100:#f3cdcd;
  --c-red-150:#f1c9c9;
  --c-red-300:#f87171;
  --c-red-400:#ef4444;
  --c-red-450:#e0483e;
  --c-red-50:#fdeeee;
  --c-red-50-2:#fff5f5;
  --c-red-50-3:#fdf1f1;
  --c-red-500:#dc2626;
  --c-red-600:#b91c1c;
  --c-red-700:#7c2222;
  --c-sky-100:#cfe3f0;
  --c-sky-50:#e6f3fb;
  --c-sky-50-2:#eef6fb;
  --c-sky-500:#2a78d6;
  --c-sky-500-2:#3b82c4;
  --c-sky-600:#0284c7;
  --c-sky-750:#20506b;
  --c-teal-100:#d9eaea;
  --c-teal-100-2:#e6eeee;
  --c-teal-100-3:#e2efef;
  --c-teal-100-4:#e6efef;
  --c-teal-100-5:#d8f3ef;
  --c-teal-150:#cfdcdc;
  --c-teal-150-2:#d7e7e7;
  --c-teal-150-3:#cde6e3;
  --c-teal-150-4:#bfe9e3;
  --c-teal-150-5:#cfe7e4;
  --c-teal-150-6:#cfe6e7;
  --c-teal-200:#b9d6d6;
  --c-teal-200-2:#b6d6d4;
  --c-teal-250:#9fd5d2;
  --c-teal-250-2:#a7e3da;
  --c-teal-300:#9fbcbc;
  --c-teal-300-2:#9cc7c9;
  --c-teal-350:#6ee7d5;
  --c-teal-350-2:#7fd1cb;
  --c-teal-350-3:#8fb9bb;
  --c-teal-50:#f4faf9;
  --c-teal-50-2:#e6f6f4;
  --c-teal-50-3:#e3f6f3;
  --c-teal-500:#2dd4bf;
  --c-teal-500-2:#3fb8af;
  --c-teal-600:#14b8a6;
  --c-teal-700:#12837f;
  --c-teal-750:#12706f;
  --c-teal-750-2:#0d6a6e;
  --c-teal-750-3:#107068;
  --c-teal-750-4:#0d6b69;
  --c-teal-750-5:#0f766e;
  --c-teal-800:#0c5559;
  --c-teal-800-2:#0a4e53;
  --c-teal-800-3:#0c5f60;
  --c-teal-800-4:#0d5558;
  --c-teal-800-5:#12474a;
  --c-teal-850:#094b4f;
  --c-teal-850-2:#083f43;
  --c-teal-900:#08352a;
  --c-teal-900-2:#0b2a2c;
  --c-violet-400:#7c3aed;
  --on-accent-rgb:255 255 255;
  --black-rgb:0 0 0;
  --shade-rgb:15 42 51;
  --c-teal-750-rgb:14 116 121;
  --c-teal-350-rgb:94 234 212;
  --c-cyan-400-rgb:56 189 248;
  --c-amber-450-rgb:251 191 36;
  --c-orange-500-rgb:245 158 11;
  --c-red-400-rgb:239 68 68;
  --c-teal-600-rgb:20 184 166;
  --bg:#f2f6f5; --surface:#fff; --line:#dde7e7; --line-soft:#eaf1f1;
  --accent:#e8a33d; --accent-ink:#8a5a00; --accent-bg:#fdf3e0;   /* R148: the saffron of the mark -- "active" and "confirmed", nothing else */
  --ink:#12343a; --ink-2:#4a6467; --ink-3:#5F767A;   /* R145: was #7C9396 (3.25:1 on white); now 4.6:1 */
  --brand:#0d5558; --brand-2:#0f6b6f; --brand-ink:#e8f5f4;
  --ok:#1c7a4a; --ok-bg:#e9f7ee; --warn:#8a5a00; --warn-bg:#fdf3e0;
  --bad:#9b2c2c; --bad-bg:#fdecec; --kin-f:#b83280;
  --r:10px; --r-lg:16px;
  /* R150 — the system: one type scale, one spacing scale, one radius scale, three shadows, three durations */
  --fs-xs:11.5px; --fs-sm:12.5px; --fs-md:13.5px; --fs-ui:14px; --fs-base:15px; --fs-lg:16.5px; --fs-xl:19px; --fs-2xl:22px; --fs-3xl:26px; --fs-d:32px;
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px; --s-7:32px; --s-8:48px;
  --r-xs:4px; --r-sm:8px; --r-md:12px; --r-xl:20px; --r-pill:999px;
  --sh-1:0 1px 2px rgb(var(--shade-rgb) / .06),0 1px 1px rgb(var(--shade-rgb) / .04);
  --sh-2:0 6px 16px -8px rgb(var(--shade-rgb) / .22),0 2px 4px rgb(var(--shade-rgb) / .06);
  --sh-3:0 24px 48px -24px rgb(var(--shade-rgb) / .35),0 6px 14px -6px rgb(var(--shade-rgb) / .12);
  --t-fast:.14s; --t-med:.22s; --t-slow:.36s; --ease:cubic-bezier(.2,.7,.2,1);
  --surface-2:#f7fafa;
  /* the motif: ward boundaries and polling centres, drawn once, used on the brand surfaces (hero, login) */
  --motif:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 300' fill='none' stroke='white' stroke-opacity='.13' stroke-width='1.2' stroke-linejoin='round'%3E%3Cpath d='M20 40 L140 22 L230 70 L330 48 L420 95 L540 60 L590 120 L520 190 L560 270 L430 285 L350 235 L250 275 L150 240 L60 265 L10 170 Z'/%3E%3Cpath d='M140 22 L170 110 L250 150 L330 48'/%3E%3Cpath d='M250 150 L230 275'/%3E%3Cpath d='M170 110 L60 160'/%3E%3Cpath d='M330 48 L350 160 L250 150'/%3E%3Cpath d='M350 160 L430 285'/%3E%3Cpath d='M420 95 L480 180 L560 270'/%3E%3Cpath d='M480 180 L350 160'/%3E%3Cg fill='white' fill-opacity='.4' stroke='none'%3E%3Ccircle cx='200' cy='120' r='3'/%3E%3Ccircle cx='390' cy='130' r='3'/%3E%3Ccircle cx='300' cy='210' r='3'/%3E%3Ccircle cx='480' cy='230' r='3'/%3E%3Ccircle cx='110' cy='200' r='3'/%3E%3C/g%3E%3C/svg%3E");
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
/* R145 — the Bangla face ships with the app (Windows has neither Noto Sans Bengali nor Hind Siliguri; it used
   Nirmala UI / Vrinda, with different widths -- the two-row menu of R142). Variable weight 400–700, two subsets. */
@font-face{font-family:"Noto Sans Bengali";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/NotoSansBengali-bengali.woff2") format("woff2");unicode-range:U+0951-0952,U+0964-0965,U+0980-09FE,U+1CD0,U+1CD2,U+1CD5-1CD6,U+1CD8,U+1CE1,U+1CEA,U+1CED,U+1CF2,U+1CF5-1CF7,U+200C-200D,U+20B9,U+25CC,U+A8F1,U+11DF0-11DF1}
@font-face{font-family:"Noto Sans Bengali";font-style:normal;font-weight:400 700;font-display:swap;src:url("../fonts/NotoSansBengali-latin.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}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:"Noto Sans Bengali","Hind Siliguri","Noto Sans",system-ui,Arial,sans-serif;
  font-size:var(--fs-base);line-height:1.75;
}

/* ---------- top bar ---------- */
.topbar{
  background:var(--brand);color:var(--on-accent);padding:0 20px;
  display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;
}
.topbar .brand{font-weight:800;font-size:var(--fs-xl);letter-spacing:.3px;color:var(--on-accent);text-decoration:none;display:flex;align-items:center;gap:9px}
.userbox{display:flex;align-items:center;gap:10px;font-size:var(--fs-ui)}
.userbox .who{display:flex;flex-direction:column;line-height:1.3;text-align:right}
.userbox .who b{font-weight:700}
.userbox .who small{color:var(--c-teal-200);font-size:var(--fs-sm)}
.userbox a{color:var(--on-accent);text-decoration:none;border:1px solid rgb(var(--on-accent-rgb) / .35);
  padding:6px 11px;border-radius:var(--r-pill);font-size:var(--fs-md);white-space:nowrap}
.userbox a:hover{background:rgb(var(--on-accent-rgb) / .14)}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--c-teal-750);color:var(--on-accent);
  display:grid;place-items:center;font-weight:700;border:2px solid rgb(var(--on-accent-rgb) / .3)}
.avatar-img{width:34px;height:34px;border-radius:50%;object-fit:cover;border:2px solid rgb(var(--on-accent-rgb) / .3);vertical-align:middle}
.userbox .bell{position:relative;padding:6px 10px;font-size:var(--fs-lg);line-height:1}
.userbox .bell .badge{position:absolute;top:-4px;right:-4px;background:var(--c-red-450);color:var(--on-accent);
  border:none;border-radius:var(--r-pill);font-size:10px;font-weight:700;padding:1px 5px;min-width:16px;text-align:center}

/* ---------- grouped navigation ---------- */
#mainnav{background:var(--surface);border-bottom:1px solid var(--line);padding:0 14px;
  display:flex;gap:2px;flex-wrap:wrap;position:sticky;top:0;z-index:20;box-shadow:var(--shadow)}
.navgroup{position:relative}
.navgroup>button{
  background:none;border:0;font:inherit;font-weight:600;color:var(--ink-2);
  padding:13px 13px;cursor:pointer;border-bottom:2px solid transparent;display:flex;align-items:center;gap:5px;width:auto
}
.navgroup>button:hover{color:var(--brand);background:var(--brand-ink)}
.navgroup>button[aria-expanded="true"]{color:var(--brand);border-bottom-color:var(--brand)}
.navgroup>button .chev{font-size:10px;opacity:.65}
.navmenu{
  display:none;position:absolute;top:100%;left:0;min-width:215px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-2);
  padding:6px;z-index:30
}
.navgroup>button[aria-expanded="true"]+.navmenu{display:block}
.navmenu a{display:block;padding:9px 11px;color:var(--ink);text-decoration:none;border-radius:var(--r-sm);font-size:var(--fs-ui)}
.navmenu a:hover{background:var(--brand-ink);color:var(--brand)}
#mainnav>a.navlink{padding:13px;font-weight:600;color:var(--ink-2);text-decoration:none;border-bottom:2px solid transparent}
#mainnav>a.navlink:hover{color:var(--brand);background:var(--brand-ink)}

/* ---------- layout ---------- */
.wrap{max-width:1600px;margin:22px auto 60px;padding:0 18px}
h1{font-size:var(--fs-3xl);margin:0 0 4px;font-weight:800;letter-spacing:-.2px}
h2{font-size:var(--fs-xl);margin:0 0 12px;font-weight:700}
h3{font-size:var(--fs-base);margin:0 0 10px;font-weight:700;color:var(--ink-2)}
.muted{color:var(--ink-3);font-size:var(--fs-md)}
.toolbar{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;margin-bottom:18px;flex-wrap:wrap}

.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:18px 20px;box-shadow:var(--shadow);margin-bottom:16px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:13px;margin-bottom:16px}
.cols{display:grid;grid-template-columns:320px 1fr;gap:16px;align-items:start}
/* Dashboard columns: each column is a flex stack so its cards fill the column
   evenly and the two sides line up at the top rather than drifting apart. */
.cols>div{display:flex;flex-direction:column;gap:0}
.cols>div>.card:last-child{margin-bottom:0}

/* Both .grid and .cols are also used with an inline grid-template-columns
   (person.php/institution.php/group.php/team.php/task.php's 1fr/1.4fr detail
   layout; several dashboard widgets' own column counts) so a plain class
   rule here cannot win against it -- inline style always outranks a
   stylesheet rule of equal or lower specificity, @media or not. Verified by
   an actual rendered screenshot at 320/360/390/414px: without !important
   here, every one of those pages kept its desktop column count and gained a
   horizontal scrollbar on every phone width tested. !important is only
   reached for; every other rule in this file wins on specificity alone. */
@media(max-width:900px){.cols{grid-template-columns:1fr!important}}
/* R43b: phones get two tiles per row (one only below 330px), matching the
   iPhone layout; a single full-width tile per row looked stretched on a
   412px Galaxy S25 Ultra. .widget-grid needs no override: its
   minmax(min(100%,380px),1fr) track already collapses to one column. */
@media(max-width:560px){.grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,130px),1fr))!important;gap:10px}}
@media(max-width:329px){.grid{grid-template-columns:1fr!important}}

/* Dashboard widgets (R20/R21): auto-fit already adapts the column count for
   any viewport >= one card's own minimum, but a minmax() floor never shrinks
   below that minimum -- below it, the grid keeps trying to lay out a
   380px-wide track and the page gained a horizontal scrollbar at every phone
   width tested (320/360/390/414px), confirmed by an actual rendered
   screenshot, not assumed. Below the floor, drop it to a single column. */
.widget-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));gap:16px;align-items:start;margin-bottom:16px}
@media(max-width:420px){.widget-grid{grid-template-columns:1fr}}

/* ---------- stat tiles ---------- */
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:15px 17px;box-shadow:var(--shadow);display:block;text-decoration:none;color:inherit;
  border-left:3px solid var(--brand)}
a.stat:hover{border-color:var(--brand-2);border-left-color:var(--brand-2);transform:translateY(-1px);transition:var(--t-fast)}
.stat .k{color:var(--ink-3);font-size:var(--fs-md);font-weight:600;display:block;margin-bottom:2px}
.stat .v{font-size:27px;font-weight:800;line-height:1.2;font-variant-numeric:tabular-nums}
.stat .sub{font-size:var(--fs-sm);color:var(--ink-3)}
.stat .v.bad{color:var(--bad)}

/* ---------- tables ---------- */
.table{width:100%;border-collapse:collapse;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;margin-bottom:16px;font-size:var(--fs-ui)}
.table th,.table td{padding:10px 13px;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:middle}
.table thead th,.table tr:first-child th{background:var(--c-mist-50);font-weight:700;color:var(--ink-2);
  font-size:var(--fs-md);text-transform:none;white-space:nowrap}
.table tbody tr:hover,.table tr:hover{background:var(--c-mist-50-2)}
.table tr:last-child td{border-bottom:0}
.table td.num,.table th.num{text-align:right;font-variant-numeric:tabular-nums}
.table input,.table select{padding:6px 8px;font-size:var(--fs-md)}
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* ---------- forms ---------- */
input,select,textarea{width:100%;padding:9px 11px;border:1px solid var(--c-teal-150);border-radius:var(--r);
  font:inherit;font-size:var(--fs-ui);background:var(--surface);color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--c-teal-250);outline-offset:1px;border-color:var(--brand-2)}
textarea{min-height:82px;resize:vertical}
label{font-weight:600;display:block;margin:0 0 5px;font-size:var(--fs-md);color:var(--ink-2)}
.formgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:14px;margin-bottom:6px}
fieldset{border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;margin:0 0 14px}
legend{font-weight:700;padding:0 6px;font-size:var(--fs-ui);color:var(--ink-2)}

/* ---------- buttons ---------- */
.btn{display:inline-block;background:var(--brand);color:var(--on-accent);padding:9px 15px;border-radius:var(--r);
  text-decoration:none;border:0;cursor:pointer;font:inherit;font-weight:600;font-size:var(--fs-ui);white-space:nowrap}
.btn:hover{background:var(--brand-2)}
.btn.secondary{background:var(--c-mist-50-3);color:var(--brand)}
.btn.secondary:hover{background:var(--c-teal-100)}
.btn.danger,.btn.danger:hover{background:var(--bad);color:var(--on-accent)}
.btn.sm{padding:5px 10px;font-size:var(--fs-md)}
.btn.icon{padding:5px 9px;line-height:1}

/* ---------- alerts & chips ---------- */
.alert{padding:11px 14px;border-radius:var(--r);background:var(--bad-bg);
  border:1px solid var(--c-red-100);color:var(--c-red-700);margin-bottom:14px;font-size:var(--fs-ui)}
.alert.ok{background:var(--ok-bg);border-color:var(--c-green-150);color:var(--c-green-750)}
.chip{display:inline-block;padding:2px 9px;border-radius:var(--r-pill);font-size:var(--fs-sm);font-weight:600;
  background:var(--c-mist-50-4);color:var(--ink-2);white-space:nowrap}
.chip.ok{background:var(--ok-bg);color:var(--ok)}
.chip.warn{background:var(--warn-bg);color:var(--warn)}
.chip.bad{background:var(--bad-bg);color:var(--bad)}

/* ---------- permission picker ---------- */
.permlist{max-height:62vh;overflow-y:auto;border:1px solid var(--line);border-radius:var(--r);padding:4px;background:var(--c-mist-50-5)}
.permgroup{border-bottom:1px solid var(--line-soft);padding:9px 10px}
.permgroup:last-child{border-bottom:0}
.permgroup>b{display:block;font-size:var(--fs-sm);color:var(--ink-3);text-transform:uppercase;letter-spacing:.4px;margin-bottom:6px}
.permrow{display:flex;align-items:center;gap:8px;padding:3px 2px;font-size:var(--fs-md)}
.permrow label{margin:0;font-weight:500;display:flex;align-items:center;gap:7px;cursor:pointer;color:var(--ink)}
.permrow input[type=checkbox]{width:auto;margin:0}
.userpick{max-height:62vh;overflow-y:auto}
.userpick a{display:block;padding:9px 11px;border-radius:var(--r-sm);text-decoration:none;color:var(--ink);
  border:1px solid transparent;font-size:var(--fs-ui)}
.userpick a:hover{background:var(--brand-ink)}
.userpick a.on{background:var(--brand);color:var(--on-accent);font-weight:600}
.userpick a small{display:block;font-size:var(--fs-sm);opacity:.75}

.bar{height:7px;background:var(--c-teal-100-2);border-radius:var(--r-pill);overflow:hidden;min-width:70px}
.bar>i{display:block;height:100%;background:var(--brand);border-radius:var(--r-pill)}

@media(max-width:700px){
  .wrap{padding:0 13px;margin-top:16px}
  .topbar{padding:0 13px}.userbox .who{display:none}
  h1{font-size:var(--fs-2xl)}.card{padding:15px}
  #mainnav{padding:0 6px}.navgroup>button,#mainnav>a.navlink{padding:11px 9px;font-size:var(--fs-ui)}
}

/* Topbar overflow at phone widths: the bell (added R15) pushed the row past
   what fit even after .who was already hidden -- logout was being clipped
   off the right edge entirely, confirmed by an actual rendered screenshot at
   360px. Tighten spacing first; flex-wrap is the safety net if a future
   addition makes the row too wide again, so a control moves to its own line
   instead of disappearing off-screen. */
@media(max-width:359px){
  .topbar{flex-wrap:wrap;row-gap:8px;min-height:0;padding:10px 13px}
  .userbox{gap:6px}
  .userbox a{padding:6px 9px;font-size:var(--fs-sm)}
  .userbox .bell{padding:6px 7px}
}

/* Footer — brand line + year, per the EMS branding rule. */
.footer{max-width:1600px;margin:30px auto 20px;padding:16px 18px;
  display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;
  font-size:var(--fs-sm);color:var(--ink-3);border-top:1px solid var(--line)}

/* Print (spec's "PDF" decision: a print stylesheet, not a PDF library --
   see docs/IMPLEMENTATION-MAP.md). Only the report itself should reach paper:
   chrome, buttons and forms are noise on a printed page and a security
   surface if left visible (the page picker leaks every report name). */
@media print{
  .topbar,nav,.footer,.btn,.no-print,form{display:none!important}
  .wrap{margin:0;padding:0;max-width:none}
  .card{border:none;box-shadow:none;padding:0;margin-bottom:14px}
  table{width:100%;border-collapse:collapse}
  th,td{border:1px solid var(--c-gray-400);padding:4px 8px}
}

/* R38 — mobile hamburger nav (P47). Desktop never shows the toggle; at phone
   width the nav collapses behind it and the dropdown groups become an
   accordion (static, full width) so nothing is positioned off-screen. Without
   JS the nav stays visible (the .js-nav class is only added by dems.js). */
.navtoggle{display:none;background:transparent;color:var(--on-accent);border:1px solid rgb(var(--on-accent-rgb) / .35);
  border-radius:var(--r-sm);font-size:var(--fs-xl);line-height:1;padding:7px 11px;cursor:pointer}
@media(max-width:700px){
  .navtoggle{display:inline-block;min-width:44px;min-height:40px}
  .topbar .brand{margin-right:auto}
  .js-nav nav#mainnav{display:none}
  .js-nav nav#mainnav.open{display:flex;flex-direction:column;position:static;padding:6px 8px;gap:0}
  nav#mainnav.open .navgroup>button,nav#mainnav.open>a.navlink{width:100%;text-align:left;padding:13px 10px;min-height:44px}
  nav#mainnav.open .navmenu{position:static;box-shadow:none;border:none;min-width:0;padding:0 0 6px 14px}
  nav#mainnav.open .navmenu a{padding:11px 10px}
}

/* R38 — connection / sync status chip (P12). State is set by offline-client.js. */
.userbox a.netstatus{font-size:var(--fs-sm);padding:4px 10px;font-weight:700;border-color:rgb(var(--on-accent-rgb) / .5)}
.netstatus[data-state="ONLINE"]{background:var(--c-green-650)}
.netstatus[data-state="OFFLINE"]{background:var(--c-mist-550)}
.netstatus[data-state="SYNCING"]{background:var(--c-blue-450)}
.netstatus[data-state="PENDING"]{background:var(--c-orange-550)}
.netstatus[data-state="CONFLICT"]{background:var(--c-red-500)}
@media(max-width:400px){.userbox a.netstatus{padding:4px 7px;font-size:var(--fs-xs)}}
.footlinks a{color:inherit}

/* R43 -- width containment for Android (reported on a Galaxy S25 Ultra: the
   header and the content below it had different widths).
   Root cause: content wider than the screen (bare wide tables, grid items
   stretching to their widest child). Android Chrome / Samsung Internet then
   widen the layout viewport and zoom out; iOS Safari does not, which is why
   iPhones looked fine. Fix at the source: tables scroll inside their own box
   (View::wrapTables), grid/flex children may shrink below their content
   width, and media/controls never exceed their container. */
.grid>*,.cols>*,.widget-grid>*,.formgrid>*,.card,.toolbar>*{min-width:0}
.card{overflow-wrap:break-word}
img,svg,video,canvas,iframe{max-width:100%;height:auto}
input,select,textarea{max-width:100%}
.tablewrap{max-width:100%;margin-bottom:16px}
.tablewrap>.table{margin-bottom:0}
.table td{overflow-wrap:break-word}
/* Topbar: wrap before anything can overflow; honour notch / punch-hole insets. */
.topbar{padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right))}
.topbar>*{min-width:0}
.topbar .brand{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* R43b: phones keep ONE header row (hamburger, brand, status, bell, avatar,
   logout) like iOS Safari showed it; spacing tightens instead of wrapping.
   Wrapping remains only as the <360px fallback above. */
.userbox a.avatarlink{padding:0;border:0;border-radius:50%}
.userbox a.avatarlink:hover{background:none}
@media(max-width:480px){
  .topbar{gap:8px;min-height:52px;padding-top:6px;padding-bottom:6px;
    padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
  .topbar .brand{font-size:var(--fs-lg);gap:7px}
  .navtoggle{min-width:40px;min-height:38px;padding:5px 9px;font-size:var(--fs-xl)}
  .userbox{gap:6px}
  .userbox a{padding:5px 9px;font-size:var(--fs-sm)}
  .userbox a.netstatus{padding:3px 8px;font-size:var(--fs-xs)}
  .userbox .bell{padding:5px 7px;font-size:var(--fs-ui)}
  .avatar,.avatar-img{width:30px;height:30px}
}
@media(max-width:380px){
  .topbar .brand{font-size:var(--fs-base)}
  .userbox{gap:4px}
  .userbox a{padding:4px 7px;font-size:var(--fs-sm)}
}
/* Compact stat tiles on phones so two fit comfortably side by side. */
@media(max-width:560px){
  .stat{padding:11px 12px}
  .stat .v{font-size:var(--fs-2xl)}
  .stat .k{font-size:var(--fs-sm);line-height:1.4}
}
/* Last-resort guard only -- the rules above remove the actual overflow. */
@supports (overflow-x:clip){ html,body{overflow-x:clip} }
@media print{ .tablewrap{overflow:visible} }

/* ================= R44 dashboard ================= */
/* 8px spacing scale: 4 8 12 16 24 32 */
.dash-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.dash-head h1{margin:0}
.dash-head p{margin:4px 0 0}
.dash-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.areasel{display:flex;align-items:center;gap:8px;margin:0}
.areasel label{margin:0;font-weight:700;color:var(--ink-2);font-size:var(--fs-md)}
.areasel select{width:auto;min-width:180px;padding:6px 10px;font-size:var(--fs-ui)}
.areachip{display:inline-block;padding:6px 12px;border-radius:var(--r-pill);background:var(--brand-ink);color:var(--brand);font-weight:700;font-size:var(--fs-md)}
.dash-bar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-lg);padding:12px 16px;margin-bottom:24px;box-shadow:var(--shadow)}
.dash-search{display:flex;gap:8px;flex:1 1 280px;margin:0}
.dash-search input{flex:1;min-width:0}
.dash-actions{display:flex;gap:8px;flex-wrap:wrap}
.dash-actions .btn{margin:0}
.dsec{margin-bottom:24px}
.dsec-h{margin:0 0 12px;font-size:var(--fs-sm);font-weight:700;letter-spacing:.4px;color:var(--ink-3);text-transform:uppercase}
.dgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px;align-items:stretch}
.cell{min-width:0;display:flex}
.cell>.dw{flex:1}
.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-6{grid-column:span 6}.span-4{grid-column:span 4}
/* One card style */
.dw{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);
  display:flex;flex-direction:column;min-width:0}
.dw-h{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line-soft)}
.dw-h h2{margin:0;font-size:var(--fs-base);font-weight:700;flex:1;min-width:0}
.dw-i{font-size:var(--fs-lg);line-height:1}
.dw-more{font-size:var(--fs-sm);font-weight:600;color:var(--brand);text-decoration:none;white-space:nowrap}
.dw-more:hover{text-decoration:underline}
.dw-b{padding:16px;flex:1}
.dw-b>*:last-child{margin-bottom:0}
.dw .table{margin-bottom:0}
.dw .tablewrap{margin:12px 0 0}
/* KPI tiles (row 1): numbers only */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,118px),1fr));gap:12px}
.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);
  padding:16px;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:4px;border-top:3px solid var(--brand)}
.kpi:hover{border-color:var(--brand-2);transform:translateY(-1px);transition:var(--t-fast)}
.kpi .v{font-size:var(--fs-3xl);font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.kpi .k{font-size:var(--fs-md);color:var(--ink-3);font-weight:600}
/* Flat metrics inside cards */
.metrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,108px),1fr));gap:8px 16px}
.metric{display:flex;flex-direction:column;gap:2px;padding:8px 0;text-decoration:none;color:inherit;border-radius:var(--r-sm)}
a.metric:hover .v{color:var(--brand-2)}
.metric .v{font-size:var(--fs-3xl);font-weight:800;line-height:1.15;font-variant-numeric:tabular-nums;color:var(--ink)}
.metric .v.txt{font-size:var(--fs-base);font-weight:700;line-height:1.4}
.metric .k{font-size:var(--fs-sm);color:var(--ink-3);line-height:1.35}
.v.ok{color:var(--ok)!important}.v.warn{color:var(--warn)!important}.v.bad{color:var(--bad)!important}.v.muted{color:var(--ink-3)!important}
.chip.warn{background:var(--warn-bg);color:var(--warn)}
.chiprow{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:12px}
.empty{color:var(--ink-3);margin:4px 0;font-size:var(--fs-ui)}
.table.compact th,.table.compact td{padding:7px 10px;font-size:var(--fs-md)}
.table tr.total td{font-weight:800;border-top:2px solid var(--line)}
.table td.nowrap,.nowrap{white-space:nowrap}
.bad-text{color:var(--bad);font-weight:700}
.annlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;margin:0;font-size:var(--fs-ui)}
.kv dt{color:var(--ink-3);font-weight:600}
.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}
@media(max-width:1100px){.span-4{grid-column:span 6}.span-8{grid-column:span 12}}
@media(max-width:720px){.span-4,.span-6,.span-8{grid-column:span 12}.dgrid{gap:12px}}
@media(max-width:560px){
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .kpi{padding:12px}
  .kpi .v{font-size:var(--fs-2xl)}
  .dash-tools,.areasel{width:100%}
  .areasel select{flex:1;min-width:0}
  .dw-b{padding:12px}
  .metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media print{.dash-tools,.dash-bar{display:none!important}}
.w-xs{width:80px;max-width:100%}
/* R45: in-page tabs (finance views) */
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 20px;border-bottom:1px solid var(--line);padding-bottom:8px}
.tab{padding:6px 12px;border-radius:var(--r-pill);text-decoration:none;color:var(--ink-2);font-weight:600;font-size:var(--fs-md);background:var(--surface);border:1px solid var(--line)}
.tab:hover{border-color:var(--brand-2);color:var(--brand)}
.tab.active{background:var(--brand);border-color:var(--brand);color:var(--on-accent)}
a.elink{color:var(--brand);text-decoration:none;font-weight:600}
a.elink:hover{text-decoration:underline}
/* R46: document slots on the add-agent form */
.docslots{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px}
.docslot{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px 12px;margin:0;min-width:0}
.docslot legend{font-weight:700;font-size:var(--fs-md);padding:0 4px}
.docslot label{margin-top:6px}
/* R47 import */
details.imp{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;margin-bottom:8px}
details.imp summary{cursor:pointer;display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}
details.imp .tablewrap{margin-top:8px}
.w-sm{width:160px;max-width:100%}
/* R48 geography / voters */
.crumbs{margin:0 0 4px;font-size:var(--fs-md);color:var(--ink-3)}
.crumbs a{color:var(--brand);text-decoration:none}
a.sortlink{color:inherit;text-decoration:none}
a.sortlink:hover{color:var(--brand)}
ul.plain{list-style:none;margin:0;padding:0}
ul.plain li{padding:6px 0;border-bottom:1px solid var(--line-soft)}
ul.plain li:last-child{border-bottom:0}
.print-only{display:none}
@media print{.print-only{display:block!important}}


/* ================= R50 theme layer =================
   One visual system on top of the base rules: a refined palette, softer
   layered shadows, consistent control heights, icon badges and accent
   colours. Pure CSS -- no web fonts (the CSP allows only 'self' and system
   fonts render Bengali fast), no backdrop-filter or large repaints, transitions
   only on transform / box-shadow -- so it stays lag-free on phones. */
:root{
  --bg:#edf2f4; --surface:#fff; --line:#e0e8eb; --line-soft:#edf2f4;
  --ink:#0f2a33; --ink-2:#3d5860; --ink-3:#6c848b;
  --brand:#0b5d61; --brand-2:#0e7479; --brand-ink:#e5f3f2;
  --r:10px; --r-lg:16px;
  /* R94: three elevation steps -- 1 resting cards/bars, 2 menus/hover, 3 dialogs/popovers. */
  --shadow-1:0 1px 2px rgb(var(--shade-rgb) / .05),0 4px 14px rgb(var(--shade-rgb) / .05);
  --shadow-2:0 2px 4px rgb(var(--shade-rgb) / .06),0 14px 30px rgb(var(--shade-rgb) / .10);
  --shadow-3:0 4px 10px rgb(var(--shade-rgb) / .08),0 22px 48px rgb(var(--shade-rgb) / .20);
  --shadow:var(--shadow-1); --shadow-lg:var(--shadow-2);
  --kc:var(--brand);
}
body{background:var(--bg)}
.topbar{background:linear-gradient(115deg,var(--c-teal-850) 0%,var(--c-teal-750-2) 55%,var(--c-teal-700) 100%);box-shadow:0 2px 12px rgb(var(--shade-rgb) / .22)}
.topbar .brand{letter-spacing:.6px}
#mainnav{border-bottom:1px solid var(--line);box-shadow:var(--shadow-1)}
.navgroup>button,#mainnav>a.navlink{font-size:var(--fs-ui)}
.navmenu{border-radius:var(--r-lg);box-shadow:var(--shadow-lg);border:1px solid var(--line);padding:6px}
.navmenu a{border-radius:var(--r)}
.wrap{margin-top:26px}
h1{font-size:var(--fs-3xl);letter-spacing:-.3px;line-height:1.3}
h2{font-size:var(--fs-lg)}
.toolbar{align-items:center;margin-bottom:22px}
.toolbar>div:last-child:not(:first-child){display:flex;gap:8px;flex-wrap:wrap;align-items:center;justify-content:flex-end}
.card{border-radius:var(--r-lg);padding:20px 22px}
/* controls: one height scale, aligned icons and text */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:38px;padding:8px 16px;border-radius:var(--r);
  line-height:1.2;transition:box-shadow var(--t-fast),transform var(--t-fast),background var(--t-fast)}
.btn:hover{box-shadow:0 4px 14px rgb(var(--shade-rgb) / .22)}
.btn:active{transform:translateY(1px)}
.btn.sm{min-height:32px;padding:5px 12px;border-radius:var(--r)}
.btn.secondary{background:var(--c-mist-50);border:1px solid var(--c-teal-150-2);color:var(--brand)}
.btn.secondary:hover{background:var(--c-teal-100-3);box-shadow:none}
input,select,textarea{border-color:var(--c-cyan-150);border-radius:var(--r);min-height:40px;transition:border-color var(--t-fast),box-shadow var(--t-fast)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand-2);box-shadow:0 0 0 3px rgb(var(--c-teal-750-rgb) / .15)}
input[type=checkbox],input[type=radio]{min-height:0}
.formgrid{gap:16px}
/* tables: calm header, faint zebra, aligned numbers */
.table{border-radius:var(--r-lg)}
.table thead th,.table tr:first-child th{background:var(--c-mist-50-6);color:var(--ink-2);font-size:var(--fs-sm);letter-spacing:.2px;border-bottom:1px solid var(--line)}
.table tr:nth-child(even)>td{background:var(--c-mist-50-5)}
.table tbody tr:hover>td,.table tr:hover>td{background:var(--c-mist-50-7)}
.chip{border-radius:var(--r-pill);padding:2px 10px}
/* dashboard cards */
.dw{border-radius:var(--r-lg);transition:box-shadow var(--t-fast)}
.dw:hover{box-shadow:var(--shadow-lg)}
.dw-h{padding:14px 18px;gap:10px}
.dw-i{width:34px;height:34px;border-radius:var(--r);display:grid;place-items:center;flex:none;font-size:var(--fs-lg);
  background:var(--brand-ink)}
.dw-b{padding:16px 18px}
.dsec{margin-bottom:28px}
.dsec-h{display:flex;align-items:center;gap:12px;font-size:var(--fs-sm);letter-spacing:.6px}
.dsec-h::after{content:"";flex:1;height:1px;background:var(--line)}
/* KPI tiles with an icon badge and an accent colour (row 1) */
.kpi.has-icon{flex-direction:row;align-items:center;gap:12px;border-top:0;border-left:4px solid var(--kc);padding:14px 16px}
.kpi.has-icon:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}
.kpi .ki{width:42px;height:42px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;font-size:var(--fs-xl);
  background:var(--brand-ink);background:color-mix(in srgb,var(--kc) 13%,var(--surface))}
.kpi .kt{display:flex;flex-direction:column;min-width:0;gap:2px}
.kpi .kt .v{color:var(--ink)}
.kc1{--kc:#0e7479}.kc2{--kc:#4f46e5}.kc3{--kc:#d97706}.kc4{--kc:#0284c7}.kc5{--kc:#7c3aed}
.kc6{--kc:#059669}.kc7{--kc:#db2777}.kc8{--kc:#e11d48}.kc9{--kc:#ca8a04}
/* dashboard hero: search always visible, then quick actions */
.dash-bar{padding:14px;gap:12px;border-radius:var(--r-lg)}
.dash-search{position:relative}
.dash-search input{min-height:46px;padding-left:42px;font-size:var(--fs-base);border-radius:var(--r-md)}
.dash-search::before{content:"🔎";position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:var(--fs-base);opacity:.7;pointer-events:none}
.dash-search .btn{min-height:46px;padding:0 20px;border-radius:var(--r-md)}
/* announcements strip: always on the dashboard */
.ann-strip{background:linear-gradient(90deg,var(--c-orange-50),var(--surface));border:1px solid var(--c-orange-150);border-left:4px solid var(--c-orange-550);
  border-radius:var(--r-lg);padding:12px 16px;margin-bottom:24px;display:flex;gap:12px;align-items:flex-start;box-shadow:var(--shadow)}
.ann-strip .ann-i{font-size:var(--fs-xl);line-height:1.3}
.ann-strip ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}
.ann-strip li{font-size:var(--fs-ui)}
.ann-strip .ann-more{margin-left:auto;font-size:var(--fs-sm);font-weight:600;color:var(--c-orange-650);text-decoration:none;white-space:nowrap}
.ann-strip.none{background:var(--surface);border-color:var(--line);border-left-color:var(--line)}
/* compact widgets (geography, system status) */
.dw.compact .dw-b{padding:12px 16px}
.dw.compact .metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 14px}
.dw.compact .metric .v{font-size:var(--fs-2xl)}
.dw.compact .kv{font-size:var(--fs-md);gap:6px 12px}
.span-3{grid-column:span 3}.span-5{grid-column:span 5}
@media(max-width:1100px){.span-3{grid-column:span 6}.span-5{grid-column:span 6}}
@media(max-width:720px){.span-3,.span-5{grid-column:span 12}}
@media(max-width:560px){
  .kpi.has-icon{padding:12px;gap:10px}
  .kpi .ki{width:34px;height:34px;font-size:var(--fs-lg);border-radius:var(--r)}
  .ann-strip{padding:10px 12px}
  h1{font-size:var(--fs-2xl)}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
@media print{.ann-strip,.dash-bar{display:none!important}}
/* R50 tuning after the 1440px review: nine KPI tiles as 5 + 4 (labels no longer
   wrap); small widgets keep their natural height instead of stretching to the
   tallest card in the row; the 3-column lists row collapses to 2 then 1. */
.kpis:has(.kpi.has-icon){grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr))}
.cell:has(>.dw.compact){align-self:start}
@media(max-width:1100px){.dgrid .span-3,.dgrid .span-4,.dgrid .span-5{grid-column:span 6}}
@media(max-width:560px){.kpis:has(.kpi.has-icon){grid-template-columns:repeat(2,minmax(0,1fr))}}
/* R50: row actions on one line, aligned */
.rowacts{display:flex;gap:6px;align-items:center;flex-wrap:nowrap}
.rowacts form{display:inline-flex!important;margin:0}
.table td.rowacts-cell{white-space:nowrap;width:1%}
/* R50: login */
body.auth{min-height:100vh;background:linear-gradient(135deg,var(--c-teal-850-2) 0%,var(--c-teal-750-2) 45%,var(--c-mist-50-8) 45.1%,var(--bg) 100%)}
@media(max-width:760px){
  body.auth{background:linear-gradient(180deg,var(--c-teal-850-2) 0,var(--c-teal-750-2) 220px,var(--bg) 220.1px)}
}
/* R51 agent calculation */
.table.calc th.grp-m{background:var(--c-blue-50)}.table.calc th.grp-f{background:var(--c-pink-50)}
.table.calc td:first-child{min-width:180px}
/* R52 live results */
[aria-busy="true"]{opacity:.55;transition:opacity var(--t-fast)}
.live-meta{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 10px}
/* ================= R53 report document ================= */
.report-doc{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden;margin-bottom:18px}
.rd-head{padding:22px 26px 14px;border-bottom:3px solid var(--brand);background:linear-gradient(180deg,var(--c-teal-50),var(--surface))}
.rd-org{display:flex;align-items:center;gap:14px}
.rd-logo{display:flex;align-items:center;gap:8px;font-weight:800;font-size:var(--fs-xl);color:var(--on-accent);background:linear-gradient(115deg,var(--c-teal-850),var(--c-teal-700));padding:8px 14px;border-radius:var(--r);letter-spacing:.5px}
.rd-logo svg{width:20px;height:20px;border-radius:5px;flex:none}
.rd-orgtext{display:flex;flex-direction:column;flex:1;min-width:0}
.rd-orgtext strong{font-size:var(--fs-lg)}
.rd-orgtext span{font-size:var(--fs-md);color:var(--ink-3)}
.rd-ref{text-align:right;font-size:var(--fs-xs);color:var(--ink-3);line-height:1.4}
.rd-ref strong{font-size:var(--fs-md);color:var(--ink);letter-spacing:.4px}
.rd-title{font-size:var(--fs-2xl);margin:16px 0 10px;font-weight:800;color:var(--ink)}
.rd-meta{display:flex;flex-wrap:wrap;gap:6px 22px;margin:0;font-size:var(--fs-md)}
.rd-meta div{display:flex;gap:6px}
.rd-meta dt{color:var(--ink-3);font-weight:600}.rd-meta dd{margin:0;font-weight:600}
.rd-summary{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid var(--line)}
.rd-summary>div{flex:1 1 140px;padding:14px 26px;border-right:1px solid var(--line-soft);display:flex;flex-direction:column}
.rd-summary .v{font-size:var(--fs-2xl);font-weight:800;font-variant-numeric:tabular-nums;color:var(--brand)}
.rd-summary .k{font-size:var(--fs-sm);color:var(--ink-3)}
.report-doc .tablewrap{margin:0;padding:16px 20px}
.report-doc .rd-table{margin:0;border-radius:var(--r)}
.rd-bar{display:inline-block;vertical-align:middle;width:90px;height:8px;background:var(--c-teal-100-4);border-radius:var(--r-pill);margin-right:10px;overflow:hidden}
.rd-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--c-teal-700),var(--brand));border-radius:var(--r-pill)}
.rd-table td.num{white-space:nowrap}
.rd-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 18px;padding:12px 26px;border-top:1px solid var(--line);font-size:var(--fs-sm);color:var(--ink-3);background:var(--c-mist-50-9)}
@media(max-width:560px){.rd-head{padding:16px}.rd-ref{display:none}.rd-summary>div{padding:10px 16px}.report-doc .tablewrap{padding:10px}.rd-bar{width:32px;margin-right:6px}}
@media print{
  @page{margin:14mm 12mm 16mm;@bottom-right{content:"পৃষ্ঠা " counter(page) " / " counter(pages);font-size:9pt;color:var(--c-gray-600)}}
  body{background:var(--surface)}
  .report-doc{border:0;box-shadow:none;border-radius:0}
  .rd-head{background:none;padding:0 0 10px}
  .rd-logo{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .rd-bar,.rd-bar i,.rd-summary .v{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .report-doc .tablewrap{padding:10px 0}
  .rd-summary>div{padding:8px 14px}
  .rd-foot{position:fixed;bottom:0;left:0;right:0;background:var(--surface);padding:4px 0;border-top:1px solid var(--c-gray-400)}
  .rd-table tr{break-inside:avoid}
}


/* ===== R55: dashboard layout — zones instead of 12-column spans ===== */
/* KPI band: one even row on desktop; --m / --s columns (chosen server-side to
   divide the tile count) on tablet and phone. */
.kpis.kband:has(.kpi){grid-template-columns:repeat(var(--n),minmax(0,1fr));gap:12px}
.kband .kpi.has-icon{flex-direction:column;align-items:flex-start;gap:10px;padding:14px 14px 12px;border-left:0;border-top:3px solid var(--kc);min-width:0}
.kband .kpi .ki{width:34px;height:34px;font-size:var(--fs-lg);border-radius:var(--r)}
.kband .kpi .kt{width:100%}
.kband .kpi .v{font-size:var(--fs-3xl)}
.kband .kpi .k{font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:1180px){.kpis.kband:has(.kpi){grid-template-columns:repeat(var(--m),minmax(0,1fr))}
  .kband .kpi.has-icon{flex-direction:row;align-items:center}}
@media(max-width:720px){.kpis.kband:has(.kpi){grid-template-columns:repeat(var(--s),minmax(0,1fr));gap:8px}
  .kband .kpi.has-icon{flex-direction:column;align-items:flex-start;gap:6px;padding:10px}
  .kband .kpi .ki{width:28px;height:28px;font-size:var(--fs-ui);border-radius:var(--r-sm)}
  .kband .kpi .v{font-size:var(--fs-2xl)}.kband .kpi .k{font-size:var(--fs-xs)}}

/* Body: wide main column + narrow side column, both top-aligned. */
.dbody{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:22px;align-items:start}
.dbody.solo,.dbody.side-only{grid-template-columns:minmax(0,1fr)}
.dmain,.dside{min-width:0}
.dmain>.dsec:last-child,.dside>.dsec:last-child{margin-bottom:0}
/* Pairs: equal-height cards two across; an odd last card takes the full row. */
.dpair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}
.dpair>.dw{min-width:0;height:100%}
.dpair>.dw:last-child:nth-child(odd){grid-column:1/-1}
.dstack{display:flex;flex-direction:column;gap:16px}
.dstack>.dw{min-width:0}
/* Metric grids: server-chosen column counts (--mc desktop, --ms phone). */
.dw .metrics.fixed{grid-template-columns:repeat(var(--mc),minmax(0,1fr));gap:6px 16px}
@media(max-width:720px){.dw .metrics.fixed{grid-template-columns:repeat(var(--ms),minmax(0,1fr))}}
/* Side column: denser cards; metrics two across; tables fit without scrolling. */
.dside .dw-h{padding:12px 16px}
.dside .dw-b{padding:12px 16px}
.dside .dw .metrics.fixed{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 14px}
.dside .metric .v{font-size:var(--fs-2xl)}
.dside .table{font-size:var(--fs-md)}
.dside .table th,.dside .table td{padding:7px 8px}
.dside .dw .tablewrap{margin-top:0}
.dside .dsec-h,.dmain .dsec-h{margin-bottom:10px}
@media(max-width:1100px){.dbody{grid-template-columns:minmax(0,1fr)}
  .dside .dstack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
  .dside .dstack>.dw:last-child:nth-child(odd){grid-column:1/-1}}
@media(max-width:720px){.dpair{grid-template-columns:minmax(0,1fr);gap:12px}.dstack{gap:12px}
  .dash-actions{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}
  .dash-actions>*{flex:none}
  .dside .dstack{grid-template-columns:minmax(0,1fr)}}

/* =====================================================================
   R56 — dashboard redesign. Everything is namespaced under .dash so the
   rest of the site is untouched. Pure CSS: gradients, conic-gradient rings,
   flex bars. No web fonts, no blur filters, no script — so there is no lag.
   ===================================================================== */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.dash{--d-ink:#0f2a2e;--d-ink2:#4a6468;--d-ink3:#7f959b;--d-line:#e2eaec;--d-soft:#f4f8f8;--d-soft2:#eaf1f2;
  --t-ok:#15803d;--t-warn:#c77700;--t-bad:#d32f2f;--t-bad2:#9f1239;--t-info:#0284c7;--t-pink:#db2777;--t-muted:#9aabb0;
  --c1:#0f766e;--c2:#4f46e5;--c3:#d97706;--c4:#0284c7;--c5:#7c3aed;--c6:#16a34a;--c7:#db2777;--c8:#dc2626;--c9:#ea580c;
  color:var(--d-ink)}
.dash .ic{display:block;flex:none}

/* ---------- hero ---------- */
.dash .hero{position:relative;overflow:hidden;border-radius:var(--r-xl);padding:26px 30px 26px;color:var(--on-accent);margin-bottom:16px;
  background:
    radial-gradient(900px 320px at 105% -30%,rgb(var(--c-teal-350-rgb) / .30),transparent 60%),
    radial-gradient(700px 300px at -5% 130%,rgb(var(--c-cyan-400-rgb) / .22),transparent 60%),
    linear-gradient(135deg,var(--c-cyan-850) 0%,var(--c-teal-800) 48%,var(--c-teal-750-3) 100%);
  box-shadow:0 22px 44px -24px rgb(var(--shade-rgb) / .65)}
.dash .hero.eday{background:
    radial-gradient(900px 320px at 105% -30%,rgb(var(--c-amber-450-rgb) / .28),transparent 60%),
    linear-gradient(135deg,var(--c-orange-850) 0%,var(--c-orange-750) 50%,var(--c-orange-650) 100%)}
.dash .hero::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.55;
  background-image:radial-gradient(rgb(var(--on-accent-rgb) / .10) 1px,transparent 1.2px);background-size:20px 20px;
  -webkit-mask-image:linear-gradient(100deg,transparent 35%,#000 85%);mask-image:linear-gradient(100deg,transparent 35%,#000 85%)}
.dash .hero>*{position:relative;z-index:1}
.dash .hero-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px 24px;flex-wrap:wrap}
.dash .hero-date{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-md);font-weight:600;color:var(--c-teal-250-2);letter-spacing:.2px}
.dash .hero h1{margin:6px 0 2px;font-size:var(--fs-3xl);line-height:1.35;font-weight:800;color:var(--on-accent)}
.dash .hero-sub{margin:0;font-size:var(--fs-ui);color:var(--c-teal-150-3);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dash .eday-pill{display:inline-flex;align-items:center;gap:5px;background:var(--c-amber-450);color:var(--c-orange-900);border-radius:var(--r-pill);padding:1px 10px;font-weight:700;font-size:var(--fs-sm)}
.dash .hero-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dash .hero-btn{display:inline-flex;align-items:center;gap:7px;height:40px;padding:0 14px;border-radius:var(--r-md);white-space:nowrap;
  background:rgb(var(--on-accent-rgb) / .10);border:1px solid rgb(var(--on-accent-rgb) / .22);color:var(--on-accent);text-decoration:none;font-weight:600;font-size:var(--fs-md);
  transition:background var(--t-fast),border-color var(--t-fast)}
.dash .hero-btn:hover{background:rgb(var(--on-accent-rgb) / .18);border-color:rgb(var(--on-accent-rgb) / .35)}
.dash .hero-btn.on{background:var(--c-amber-450);border-color:var(--c-amber-450);color:var(--c-orange-900)}
.dash .hero-btn.icon{width:40px;padding:0;justify-content:center}
.dash .hero-btn.static{cursor:default}
.dash .hero-area{display:flex;align-items:center;gap:0;height:40px;border-radius:var(--r-md);background:rgb(var(--on-accent-rgb) / .10);border:1px solid rgb(var(--on-accent-rgb) / .22);padding-left:12px}
.dash .hero-area label{margin:0;color:var(--c-teal-150-3);display:flex}
.dash .hero-area select{background:transparent;border:0;box-shadow:none;color:var(--on-accent);font:inherit;font-weight:600;font-size:var(--fs-md);min-height:0;height:38px;
  padding:0 30px 0 8px;width:auto;max-width:230px;cursor:pointer}
.dash .hero-area select:focus{box-shadow:none;outline:2px solid rgb(var(--on-accent-rgb) / .5);outline-offset:-2px;border-radius:var(--r)}
.dash .hero-area option{color:var(--c-cyan-900);background:var(--surface)}
.dash .hero-row{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-top:22px}
.dash .hero-main{flex:1;min-width:0;max-width:820px}
.dash .hero-search{display:flex;align-items:center;gap:10px;background:var(--surface);border-radius:var(--r-lg);padding:6px 6px 6px 16px;color:var(--c-mist-500);
  box-shadow:0 10px 28px -12px rgb(var(--black-rgb) / .45)}
.dash .hero-search input[type=search]{flex:1;min-width:0;border:0;box-shadow:none;outline:0;background:transparent;font:inherit;font-size:var(--fs-base);
  color:var(--d-ink);padding:10px 0;min-height:0;height:auto;border-radius:0}
.dash .hero-search input[type=search]:focus{box-shadow:none;outline:0}
.dash .hero-search button{height:44px;padding:0 24px;border:0;border-radius:var(--r-md);background:linear-gradient(135deg,var(--c-teal-750-4),var(--c-teal-800-2));color:var(--on-accent);
  font:inherit;font-weight:700;font-size:var(--fs-ui);cursor:pointer;flex:none;width:auto}
.dash .hero-search button:hover{filter:brightness(1.1)}
.dash .hero-search:focus-within{box-shadow:0 0 0 4px rgb(var(--c-teal-350-rgb) / .35),0 10px 28px -12px rgb(var(--black-rgb) / .45)}
.dash .hero-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.dash .qa{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 13px 0 10px;border-radius:var(--r-pill);font-size:var(--fs-md);font-weight:600;
  color:var(--c-teal-50-2);text-decoration:none;background:rgb(var(--on-accent-rgb) / .08);border:1px solid rgb(var(--on-accent-rgb) / .2);transition:background var(--t-fast)}
.dash .qa:hover{background:rgb(var(--on-accent-rgb) / .18);color:var(--on-accent)}
.dash .hero-count{flex:none;min-width:190px;display:flex;flex-direction:column;align-items:flex-end;text-align:right;gap:2px;
  padding:14px 18px;border-radius:var(--r-xl);background:rgb(var(--on-accent-rgb) / .08);border:1px solid rgb(var(--on-accent-rgb) / .18);color:var(--on-accent);text-decoration:none}
.dash .hero-count b{font-size:42px;line-height:1;font-weight:800;letter-spacing:-.5px}
.dash .hero-count span{font-size:var(--fs-ui);font-weight:700;color:var(--c-teal-100-5)}
.dash .hero-count small{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-sm);color:var(--c-teal-250-2);margin-top:4px}
.dash .hero-count.unset{align-items:flex-start;text-align:left;gap:4px;border-style:dashed}
.dash .hero-count.unset:hover{background:rgb(var(--on-accent-rgb) / .14)}

/* ---------- announcements ---------- */
.dash .ann2{display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--d-line);border-radius:var(--r-xl);padding:12px 16px;margin-bottom:18px;
  box-shadow:var(--shadow-1)}
.dash .ann2-i{width:40px;height:40px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;color:var(--c-orange-650);background:var(--c-orange-50-2)}
.dash .ann2.none .ann2-i{color:var(--d-ink3);background:var(--d-soft)}
.dash .ann2-b{flex:1;min-width:0}
.dash .ann2 ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px}
/* R177: one line of running text at every width -- chip, title and body wrap as words, the body on its own line;
   a long link or unbroken word breaks inside the card instead of spilling out of it */
.dash .ann2 li{display:block;font-size:var(--fs-ui);line-height:1.55;min-width:0;overflow-wrap:anywhere}
.dash .ann2 li>.sev{margin-right:6px}
.dash .ann2 li b{font-weight:700}
.dash .ann2-t{display:block;margin-top:2px;color:var(--d-ink2);font-size:var(--fs-md)}
/* R177: a narrow card (the rail from 1400px) puts its link under the text instead of beside it */
.dt-ann{container-type:inline-size}
@container (max-width:640px){
  .dash .ann2{flex-direction:column;align-items:stretch;gap:8px}
  .dash .ann2-more{margin-left:0;align-self:flex-start}
}
.dash .ann2-pin{color:var(--c-orange-650);align-self:center}
.dash .ann2-empty{margin:0;color:var(--d-ink3);font-size:var(--fs-ui)}
.dash .ann2-more{display:inline-flex;align-items:center;gap:5px;flex:none;font-size:var(--fs-md);font-weight:700;color:var(--c-teal-800-3);text-decoration:none;padding:7px 12px;border-radius:var(--r);background:var(--d-soft)}
.dash .ann2-more:hover{background:var(--d-soft2)}
.dash .sev{display:inline-block;font-size:var(--fs-xs);font-weight:700;border-radius:var(--r-pill);padding:1px 9px;background:var(--d-soft);color:var(--d-ink2);flex:none}
.dash .sev.t-bad{background:var(--bad-bg);color:var(--t-bad)}
.dash .sev.t-warn{background:var(--c-orange-50-3);color:var(--t-warn)}
.dash .sev.t-info{background:var(--c-sky-50);color:var(--t-info)}

/* ---------- KPI band ---------- */
.dash .stat-band{display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));gap:12px;margin-bottom:24px}
.dash .stat{--tc:var(--c1);display:flex;flex-direction:column;gap:12px;min-width:0;padding:15px 15px 14px;background:var(--surface);border:1px solid var(--d-line);
  border-radius:var(--r-xl);text-decoration:none;color:var(--d-ink);box-shadow:var(--shadow-1);transition:transform var(--t-fast),box-shadow var(--t-fast),border-color var(--t-fast)}
.dash .stat:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--tc) 35%,var(--on-accent));box-shadow:0 14px 26px -16px color-mix(in srgb,var(--tc) 55%,transparent)}
.dash .stat .si{width:38px;height:38px;border-radius:var(--r-md);display:grid;place-items:center;color:var(--tc);background:color-mix(in srgb,var(--tc) 11%,var(--surface))}
.dash .stat .stx{display:flex;flex-direction:column;gap:3px;min-width:0}
.dash .stat .sv{font-size:var(--fs-3xl);font-weight:800;line-height:1.05;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.dash .stat .sk{font-size:var(--fs-sm);font-weight:600;color:var(--d-ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash .stat .sk small{font-weight:500;color:var(--d-ink3)}
.dash .tone-1{--tc:var(--c1)}.dash .tone-2{--tc:var(--c2)}.dash .tone-3{--tc:var(--c3)}.dash .tone-4{--tc:var(--c4)}.dash .tone-5{--tc:var(--c5)}
.dash .tone-6{--tc:var(--c6)}.dash .tone-7{--tc:var(--c7)}.dash .tone-8{--tc:var(--c8)}.dash .tone-9{--tc:var(--c9)}

/* ---------- body layout ---------- */
.dash .dbody2{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:24px;align-items:start}
.dash .dbody2.one{grid-template-columns:minmax(0,1fr)}
.dash .dcol{display:flex;flex-direction:column;gap:24px;min-width:0}
.dash .dgroup{min-width:0}
.dash .dsh{display:flex;align-items:center;gap:12px;margin:0 0 12px;font-size:var(--fs-md);font-weight:700;color:var(--d-ink2);letter-spacing:.2px}
.dash .dsh::after{content:"";flex:1;height:1px;background:var(--d-line)}
.dash .pairs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch}
.dash .pairs>.dcard:last-child:nth-child(odd){grid-column:1/-1}
.dash .stack{display:flex;flex-direction:column;gap:16px}

/* ---------- cards ---------- */
.dash .dcard{--acc:var(--c1);display:flex;flex-direction:column;min-width:0;background:var(--surface);border:1px solid var(--d-line);border-radius:var(--r-xl);
  box-shadow:var(--shadow-1)}
.dash .acc-teal{--acc:var(--c1)}.dash .acc-indigo{--acc:var(--c2)}.dash .acc-amber{--acc:var(--c3)}.dash .acc-sky{--acc:var(--c4)}
.dash .acc-violet{--acc:var(--c5)}.dash .acc-green{--acc:var(--c6)}.dash .acc-red{--acc:var(--c8)}.dash .acc-orange{--acc:var(--c9)}
.dash .acc-emerald{--acc:#059669}.dash .acc-slate{--acc:#475569}
.dash .dc-h{display:flex;align-items:center;gap:12px;padding:16px 18px 4px}
.dash .dc-i{width:40px;height:40px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;color:var(--acc);background:color-mix(in srgb,var(--acc) 11%,var(--surface))}
.dash .dc-t{flex:1;min-width:0}
.dash .dc-t h2{margin:0;font-size:var(--fs-base);line-height:1.35;font-weight:700;color:var(--d-ink);display:flex;align-items:center;gap:8px}
.dash .dc-t p{margin:1px 0 0;font-size:var(--fs-sm);line-height:1.4;color:var(--d-ink3)}
.dash .dc-more{display:inline-flex;align-items:center;gap:4px;flex:none;padding:6px 10px;border-radius:var(--r);font-size:var(--fs-sm);font-weight:600;color:var(--d-ink2);text-decoration:none}
.dash .dc-more:hover{background:var(--d-soft);color:var(--acc)}
.dash .dc-b{flex:1;display:flex;flex-direction:column;gap:14px;padding:12px 18px 18px;min-width:0}
.dash .dc-b>p{margin:0}
.dash .cnt{display:inline-block;font-size:var(--fs-xs);font-weight:700;border-radius:var(--r-pill);padding:1px 9px;background:var(--d-soft2);color:var(--d-ink2)}
.dash .cnt.bad{background:var(--t-bad);color:var(--on-accent)}
.dash .mini-h{margin:0 0 4px;font-size:var(--fs-sm);font-weight:700;color:var(--d-ink3)}
.dash .subline{margin:-8px 0 0;font-size:var(--fs-sm);color:var(--d-ink3)}

/* stat tiles inside cards */
.dash .stats{display:grid;grid-template-columns:repeat(var(--mc),minmax(0,1fr));gap:8px}
.dash .st{display:flex;flex-direction:column;justify-content:space-between;gap:4px;min-width:0;padding:11px 12px;border-radius:var(--r-lg);background:var(--d-soft);
  border:1px solid transparent;text-decoration:none;color:inherit;transition:background var(--t-fast),border-color var(--t-fast)}
.dash a.st:hover{background:var(--surface);border-color:var(--d-line)}
.dash .st .v{font-size:var(--fs-2xl);font-weight:800;line-height:1.1;letter-spacing:-.3px;font-variant-numeric:tabular-nums;color:var(--d-ink)}
.dash .st .v.txt{font-size:var(--fs-ui);font-weight:700;line-height:1.4;letter-spacing:0}
.dash .st .k{font-size:var(--fs-sm);line-height:1.35;color:var(--d-ink2)}
.dash .st.t-ok .v{color:var(--t-ok)}
.dash .st.t-muted .v{color:var(--d-ink3)}
.dash .st.t-warn{background:var(--c-orange-50-4)}.dash .st.t-warn .v{color:var(--t-warn)}
.dash .st.t-bad{background:var(--c-red-50)}.dash .st.t-bad .v{color:var(--t-bad)}

/* gauges */
.dash .gauges{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:10px}
.dash .gauge{--g:var(--t-ok);display:flex;align-items:center;gap:12px;min-width:0;padding:12px;border-radius:var(--r-lg);border:1px solid var(--d-line)}
.dash .g-warn{--g:var(--t-warn)}.dash .g-bad{--g:var(--t-bad)}.dash .g-muted{--g:#c9d5d8}
.dash .ring{width:60px;height:60px;border-radius:50%;flex:none;display:grid;place-items:center;
  background:conic-gradient(var(--g) calc(var(--p)*1%),var(--d-soft2) 0)}
.dash .ring span{width:47px;height:47px;border-radius:50%;background:var(--surface);display:grid;place-items:center;font-size:var(--fs-md);font-weight:800;
  font-variant-numeric:tabular-nums;color:var(--d-ink)}
.dash .gl{display:flex;flex-direction:column;min-width:0}
.dash .gl b{font-size:var(--fs-md);line-height:1.35}
.dash .gl small{font-size:var(--fs-sm);line-height:1.35;color:var(--d-ink3)}

/* bars */
.dash .bignum{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.dash .bignum b{font-size:var(--fs-d);font-weight:800;line-height:1;letter-spacing:-.6px;font-variant-numeric:tabular-nums}
.dash .bignum span{font-size:var(--fs-md);font-weight:600;color:var(--d-ink3)}
.dash .pbar{height:10px;border-radius:var(--r-pill);background:var(--d-soft2);overflow:hidden}
.dash .pbar i{display:block;height:100%;border-radius:var(--r-pill);background:linear-gradient(90deg,var(--c-teal-750-5),var(--c-teal-500))}
.dash .pb-warn i{background:linear-gradient(90deg,var(--c-orange-550),var(--c-amber-450))}
.dash .pb-bad i{background:linear-gradient(90deg,var(--c-red-500),var(--c-red-300))}
.dash .metaline{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:var(--fs-md);color:var(--d-ink2)}
.dash .metaline a{font-weight:700;text-decoration:none;color:var(--d-ink2)}
.dash .metaline span{display:inline-flex;align-items:center;gap:5px}
.dash .segbar{display:flex;gap:3px;height:12px;border-radius:var(--r-pill);overflow:hidden;background:var(--d-soft2)}
.dash .segbar i{display:block;min-width:8px}
.dash .seglegend{display:flex;flex-wrap:wrap;gap:6px 18px}
.dash .seglegend>*{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-md);color:var(--d-ink2);text-decoration:none}
.dash .seglegend a:hover{color:var(--d-ink)}
.dash .seglegend b{color:var(--d-ink);font-variant-numeric:tabular-nums}
.dash .sw{width:10px;height:10px;border-radius:var(--r-xs);display:inline-block;flex:none}
.dash .t-ok.sw,.dash .segbar .t-ok{background:var(--c-green-650-2)}
.dash .t-warn.sw,.dash .segbar .t-warn{background:var(--c-orange-500)}
.dash .t-bad.sw,.dash .segbar .t-bad{background:var(--c-red-400)}
.dash .t-bad2.sw,.dash .segbar .t-bad2{background:var(--c-pink-650)}
.dash .t-info.sw,.dash .segbar .t-info{background:var(--c-cyan-500)}
.dash .t-pink.sw{background:var(--c-pink-400)}
.dash .t-muted.sw,.dash .segbar .t-muted{background:var(--c-cyan-350)}
.dash .alertline{display:flex;align-items:center;gap:8px;padding:9px 12px;border-radius:var(--r-md);background:var(--c-red-50);color:var(--t-bad);font-size:var(--fs-md);font-weight:700;text-decoration:none}
.dash .empty2{display:flex;align-items:center;gap:10px;padding:12px 14px;border-radius:var(--r-lg);background:var(--d-soft);color:var(--d-ink3);font-size:var(--fs-md)}
.dash .empty2 .ic{color:var(--c-green-650-2)}

/* voter split + horizontal bars */
.dash .split{display:flex;gap:3px;height:12px;border-radius:var(--r-pill);overflow:hidden}
.dash .split .m{background:linear-gradient(90deg,var(--c-sky-600),var(--c-cyan-400))}
.dash .split .f{background:linear-gradient(90deg,var(--c-pink-300),var(--c-pink-500))}
.dash .split-l{display:flex;justify-content:space-between;gap:8px;margin-top:8px;font-size:var(--fs-sm);color:var(--d-ink2)}
.dash .split-l span{display:inline-flex;align-items:center;gap:6px}
.dash .hbars{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.dash .hbars li{display:grid;grid-template-columns:minmax(64px,auto) minmax(0,1fr) auto;align-items:center;gap:10px;font-size:var(--fs-md)}
.dash .hbars .hl{color:var(--d-ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}
.dash .hbars .hb{height:8px;border-radius:var(--r-pill);background:var(--d-soft2);overflow:hidden}
.dash .hbars .hb i{display:block;height:100%;border-radius:var(--r-pill);background:linear-gradient(90deg,var(--c-cyan-500),var(--c-teal-750-5))}
.dash .hbars.violet .hb i{background:linear-gradient(90deg,var(--c-indigo-250),var(--c-violet-400))}
.dash .hbars b{font-size:var(--fs-md);font-variant-numeric:tabular-nums;text-align:right;min-width:42px}

/* geography tiles */
.dash .geo2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.dash .geo2>*{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center;padding:10px 12px;border-radius:var(--r-lg);
  background:var(--d-soft);text-decoration:none;color:inherit;border:1px solid transparent}
.dash .geo2>a:hover{background:var(--surface);border-color:var(--d-line)}
.dash .geo2 .gi{grid-row:1/3;width:32px;height:32px;border-radius:var(--r);display:grid;place-items:center;background:var(--surface);color:var(--c1)}
.dash .geo2 b{font-size:var(--fs-xl);line-height:1.15;font-variant-numeric:tabular-nums}
.dash .geo2 small{font-size:var(--fs-sm);color:var(--d-ink2);line-height:1.3}

/* attention list */
.dash .allgood{display:flex;align-items:center;gap:9px;padding:10px 12px;border-radius:var(--r-lg);background:var(--ok-bg);color:var(--t-ok);font-weight:700;font-size:var(--fs-md)}
.dash .alist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.dash .arow{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:var(--r-lg);background:var(--d-soft);color:var(--d-ink);text-decoration:none;transition:background var(--t-fast)}
.dash .arow:hover{background:var(--d-soft2)}
.dash .adot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--c-cyan-250)}
.dash .arow.t-ok .adot{background:var(--c-green-550)}
.dash .arow.t-warn .adot{background:var(--c-orange-500);box-shadow:0 0 0 4px rgb(var(--c-orange-500-rgb) / .18)}
.dash .arow.t-bad .adot{background:var(--c-red-400);box-shadow:0 0 0 4px rgb(var(--c-red-400-rgb) / .18)}
.dash .al{flex:1;min-width:0;font-size:var(--fs-md);font-weight:600}
.dash .an{min-width:30px;text-align:center;padding:1px 9px;border-radius:var(--r-pill);font-size:var(--fs-md);font-weight:800;background:var(--surface);border:1px solid var(--d-line);font-variant-numeric:tabular-nums}
.dash .arow.t-bad .an{background:var(--c-red-400);border-color:var(--c-red-400);color:var(--on-accent)}
.dash .arow.t-warn .an{background:var(--c-orange-500);border-color:var(--c-orange-500);color:var(--on-accent)}

/* tasks, lists, timeline, key-value */
.dash .tk{display:grid;grid-template-columns:minmax(0,280px) minmax(0,1fr);gap:22px;align-items:start}
.dash .tk-sum{display:flex;flex-direction:column;gap:14px}
.dash .tk-sum .gauge{border:0;background:var(--d-soft)}
.dash .rows{list-style:none;margin:0;padding:0}
.dash .rows li{display:flex;align-items:center;gap:10px;padding:10px 2px;border-bottom:1px solid var(--d-line)}
.dash .rows li:last-child{border-bottom:0}
.dash .rt{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.4}
.dash .rt a{font-weight:700;color:var(--d-ink);text-decoration:none}
.dash .rt a:hover{color:var(--c1);text-decoration:underline}
.dash .rt small{font-size:var(--fs-sm);color:var(--d-ink3)}
.dash .rt small a{font-weight:500;color:var(--d-ink2)}
.dash .due{display:inline-flex;align-items:center;gap:5px;flex:none;font-size:var(--fs-sm);font-weight:700;padding:3px 10px;border-radius:var(--r-pill);background:var(--d-soft);color:var(--d-ink2);white-space:nowrap}
.dash .due.late{background:var(--c-red-50);color:var(--t-bad)}
.dash .tl{list-style:none;margin:0;padding:0;position:relative}
.dash .tl::before{content:"";position:absolute;left:5px;top:8px;bottom:8px;width:2px;background:var(--d-line)}
.dash .tl li{position:relative;padding:0 0 12px 24px;font-size:var(--fs-md);line-height:1.5}
.dash .tl li:last-child{padding-bottom:0}
.dash .tl li::before{content:"";position:absolute;left:0;top:6px;width:12px;height:12px;border-radius:50%;background:var(--surface);border:2.5px solid var(--c1)}
.dash .tl-a{display:inline-block;font-size:var(--fs-xs);font-weight:700;padding:0 8px;border-radius:var(--r-pill);background:var(--d-soft2);color:var(--d-ink2)}
.dash .tl-e{color:var(--d-ink2)}
.dash .tl small{display:block;font-size:var(--fs-sm);color:var(--d-ink3)}
.dash .kv2{margin:0;display:flex;flex-direction:column}
.dash .kv2>div{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:8px 0;border-bottom:1px dashed var(--d-line);font-size:var(--fs-md)}
.dash .kv2>div:last-child{border-bottom:0}
.dash .kv2 dt{color:var(--d-ink3)}
.dash .kv2 dd{margin:0;font-weight:600;text-align:right;min-width:0;overflow-wrap:anywhere}
.dash .assign{display:flex;flex-direction:column;gap:2px}
.dash .assign b{font-size:var(--fs-lg)}
.dash .assign small{color:var(--d-ink3)}
.dash .chiprow{margin-top:0}

/* side column is denser */
.dash .dside2 .dc-h{padding:14px 16px 2px}
.dash .dside2 .dc-b{padding:10px 16px 16px;gap:12px}
.dash .dside2 .dc-i{width:36px;height:36px;border-radius:var(--r-md)}

/* ---------- responsive ---------- */
@media(max-width:1180px){
  .dash .stat-band{grid-template-columns:repeat(var(--m),minmax(0,1fr))}
  .dash .stat{flex-direction:row;align-items:center}
  .dash .dbody2{grid-template-columns:minmax(0,1fr)}
  .dash .dside2 .stack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
  .dash .dside2 .stack>.dcard:last-child:nth-child(odd){grid-column:1/-1}
}
@media(max-width:860px){
  .dash .hero-row{flex-direction:column;align-items:stretch}
  .dash .hero-count{align-items:flex-start;text-align:left;flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:4px 10px;min-width:0}
  .dash .hero-count b{font-size:var(--fs-d)}
  .dash .tk{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:720px){
  .dash .hero{padding:20px 18px;border-radius:var(--r-xl)}
  .dash .hero h1{font-size:var(--fs-2xl)}
  .dash .hero-tools{width:100%}
  .dash .hero-area{flex:1;min-width:0}
  .dash .hero-area select{max-width:none;width:100%}
  .dash .hero-search{padding:5px 5px 5px 12px;border-radius:var(--r-lg)}
  .dash .hero-search button{height:40px;padding:0 16px}
  .dash .hero-actions{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-right:-18px;padding-right:18px}
  .dash .qa{flex:none}
  .dash .ann2{flex-direction:column;align-items:stretch;gap:8px;padding:12px}   /* R177: the icon is hidden (R155), so no 54px indent and no 40px grid column */
  .dash .ann2-more{margin-left:0;align-self:flex-start}
  .dash .stat-band{grid-template-columns:repeat(var(--s),minmax(0,1fr));gap:8px}
  .dash .stat{flex-direction:column;align-items:flex-start;gap:8px;padding:11px;border-radius:var(--r-lg)}
  .dash .stat .si{width:30px;height:30px;border-radius:var(--r)}
  .dash .stat .sv{font-size:var(--fs-2xl)}
  .dash .stat .sk{font-size:var(--fs-xs)}
  .dash .pairs,.dash .dside2 .stack{grid-template-columns:minmax(0,1fr);gap:12px}
  .dash .stack,.dash .dcol{gap:14px}
  .dash .dbody2{gap:14px}
  .dash .stats{grid-template-columns:repeat(var(--ms),minmax(0,1fr))}
  .dash .gauges{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dash .gauge{flex-direction:column;align-items:flex-start;gap:8px}
  .dash .dc-h{padding:14px 14px 2px}.dash .dc-b{padding:10px 14px 14px}
}

/* R56 review: rings one row (count-aware), ring above label */
.dash .gauges{grid-template-columns:repeat(var(--gc),minmax(0,1fr))}
.dash .dcard .gauges .gauge{flex-direction:column;align-items:center;text-align:center;gap:8px;padding:14px 8px}
.dash .dcard .gauges .gl{align-items:center}
.dash .dcard .gauges .ring{width:66px;height:66px}
.dash .dcard .gauges .ring span{width:52px;height:52px;font-size:var(--fs-ui)}
.dash .dgroup+.dgroup{margin-top:0}
@media(max-width:720px){.dash .gauges{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .dash .dcard .gauges .ring{width:56px;height:56px}.dash .dcard .gauges .ring span{width:44px;height:44px;font-size:var(--fs-sm)}
  .dash .dcard .gauges .gl b{font-size:var(--fs-sm)}.dash .dcard .gauges .gl small{font-size:var(--fs-xs)}}
.dash .pairs>.dcard:last-child:nth-child(odd) .stats{grid-template-columns:repeat(var(--mc),minmax(0,220px))}
@media(max-width:720px){
  .dash .hero-area{flex:1 1 100%}
  .dash .hero-tools>.hero-btn:not(.icon){flex:1;justify-content:center}
}
.dash .ann2-pin{display:inline-flex;vertical-align:-2px;margin-right:4px}
.card[id]{scroll-margin-top:72px}

/* =====================================================================
   R58
   ===================================================================== */
/* Header and menu line up with the page column on wide screens (they used to
   run edge to edge while the page is a centred 1600px column). */
@media(min-width:901px){
  .topbar{padding-left:max(20px,calc((100% - 1600px)/2 + 18px));padding-right:max(20px,calc((100% - 1600px)/2 + 18px))}
  #mainnav{padding-left:max(14px,calc((100% - 1600px)/2 + 5px));padding-right:max(14px,calc((100% - 1600px)/2 + 5px))}
}
/* Menus always above page content; the right-most dropdowns open leftwards so
   they never run off screen. */
#mainnav{z-index:60}
.navmenu{z-index:70;max-height:calc(100vh - 120px);overflow-y:auto}
#mainnav>.navgroup:nth-last-child(-n+3) .navmenu{left:auto;right:0}
@media(max-width:900px){
  nav#mainnav.open .navmenu{margin:2px 0 8px 12px;padding:4px 0 4px 10px;border-left:3px solid var(--brand-2);background:var(--brand-ink);border-radius:0 10px 10px 0}
  nav#mainnav.open .navmenu a{font-size:var(--fs-ui);padding:9px 10px}
  nav#mainnav.open .navgroup>button[aria-expanded="true"]{background:var(--brand-ink);border-radius:var(--r)}
  nav#mainnav.open .navgroup>button .chev{margin-left:auto}
}

/* Sized widget grid: s quarter, m third, l half, xl full; rows stretch to fill. */
.dash .wgrid{display:flex;flex-wrap:wrap;gap:16px;align-items:stretch}
.dash .wcell{display:flex;min-width:0;flex:1 1 calc(33.333% - 10.67px)}
.dash .wcell>.dcard{flex:1;min-width:0}
.dash .wcell.w-s{flex-basis:calc(25% - 12px)}
.dash .wcell.w-m{flex-basis:calc(33.333% - 10.67px)}
.dash .wcell.w-l{flex-basis:calc(50% - 8px)}
.dash .wcell.w-xl{flex-basis:100%}
@media(max-width:1180px){
  .dash .wcell.w-s,.dash .wcell.w-m,.dash .wcell.w-l{flex-basis:calc(50% - 8px)}
}
@media(max-width:720px){
  .dash .wgrid{gap:12px}
  .dash .wcell.w-s,.dash .wcell.w-m,.dash .wcell.w-l,.dash .wcell.w-xl{flex-basis:100%}
}
/* A task card in a narrow cell stacks its two halves. */
.dash .wcell.w-s .tk,.dash .wcell.w-m .tk{grid-template-columns:minmax(0,1fr)}
.dash .wcell.w-s .gauges{grid-template-columns:repeat(2,minmax(0,1fr))}

/* Resize menu in each card header */
.dash .dc-h{position:relative}
.dash .wsize{position:relative;flex:none}
.dash .wsize>summary{list-style:none;width:30px;height:30px;border-radius:var(--r);display:grid;place-items:center;cursor:pointer;color:var(--d-ink3)}
.dash .wsize>summary::-webkit-details-marker{display:none}
.dash .wsize>summary:hover,.dash .wsize[open]>summary{background:var(--d-soft);color:var(--d-ink)}
.dash .wsize-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:15;min-width:170px;padding:6px;
  background:var(--surface);border:1px solid var(--d-line);border-radius:var(--r-lg);box-shadow:var(--shadow-3)}
.dash .wsize-form{display:flex;flex-direction:column;gap:2px}
/* R96: sequence selector under the sizes */
.dash .worder-form{display:flex;align-items:center;gap:8px;margin-top:4px;padding-top:6px;border-top:1px solid var(--d-line)}
.dash .witems-form button{width:auto;flex:1;justify-content:center;min-height:30px;padding:2px 8px;border:1px solid var(--d-line);border-radius:var(--r-sm);background:transparent;font:inherit;cursor:pointer}
.dash .witems-form button.on{background:var(--brand);border-color:var(--brand);color:var(--on-accent)}
.dash .worder-form select{width:auto;min-height:34px;padding:4px 8px;font-size:var(--fs-md);flex:1}
.dash .wsize-h{font-size:var(--fs-xs);font-weight:700;color:var(--d-ink3);padding:4px 8px}
.dash .wsize-form button{display:flex;align-items:center;gap:10px;width:100%;min-height:34px;padding:6px 8px;border:0;border-radius:var(--r);background:transparent;
  font:inherit;font-size:var(--fs-md);color:var(--d-ink);cursor:pointer;text-align:left}
.dash .wsize-form button:hover{background:var(--d-soft)}
.dash .wsize-form button.on{background:color-mix(in srgb,var(--acc) 12%,var(--surface));color:var(--acc);font-weight:700}
.dash .sz{display:inline-block;height:10px;border-radius:var(--r-xs);background:currentColor;opacity:.55;flex:none}
.dash .sz-s{width:8px}.dash .sz-m{width:12px}.dash .sz-l{width:18px}.dash .sz-xl{width:30px}
@media(max-width:720px){.dash .wsize{display:none}}

/* Countdown: number and unit on one centred line, date under it */
.dash .hero-count{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;min-width:200px;padding:14px 20px}
.dash .hero-count .hc-name{font-size:var(--fs-sm);font-weight:700;color:var(--c-teal-250-2);letter-spacing:.2px;max-width:240px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dash .hero-count .hc-main{display:flex;align-items:center;justify-content:center;gap:10px}
.dash .hero-count .hc-main b{font-size:46px;line-height:1;font-weight:800;letter-spacing:-.5px}
.dash .hero-count .hc-unit{font-size:var(--fs-base);font-weight:700;color:var(--c-teal-50-3);line-height:1.3;text-align:left}
.dash .hero-count small{display:inline-flex;align-items:center;gap:6px;margin:0;font-size:var(--fs-sm);color:var(--c-teal-150-4)}
.dash .hero-count.unset{align-items:center;text-align:center}
.dash .hero-count.unset .hc-unit{font-size:var(--fs-ui)}
@media(max-width:860px){
  .dash .hero-count{flex-direction:column;align-items:flex-start;text-align:left;min-width:0;padding:12px 16px;gap:4px}
  .dash .hero-count .hc-main{justify-content:flex-start}
  .dash .hero-count .hc-main b{font-size:36px}
  .dash .hero-count.unset{align-items:flex-start;text-align:left}
}

/* Settings page */
.settabs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px}
.settabs a{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--r-pill);background:var(--surface);border:1px solid var(--line);
  color:var(--ink-2);text-decoration:none;font-weight:600;font-size:var(--fs-ui)}
.settabs a:hover{border-color:var(--brand-2);color:var(--brand)}
.setcard h2{display:flex;align-items:center;gap:9px}
.setcard h2 .ic,.settabs .ic{flex:none}
.setcard small.muted{display:block;margin-top:4px;font-size:var(--fs-sm);line-height:1.5}

/* Polling centre: booth and agent boxes */
.agentbox{border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px 14px;margin:4px 0 0}
.agentbox legend{font-weight:700;padding:0 6px}
.agentgrid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;align-items:stretch}
.calcbox{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:var(--r-md);background:var(--brand-ink);border:1px dashed var(--c-teal-200-2)}
.calcbox .k{font-size:var(--fs-sm);font-weight:700;color:var(--ink-2)}
.calcbox output{font-size:var(--fs-3xl);font-weight:800;line-height:1.2;color:var(--brand);font-variant-numeric:tabular-nums}
.calcbox small{font-size:var(--fs-xs);color:var(--ink-3)}
.calcbox.total{background:var(--c-teal-800-4);border-style:solid;border-color:var(--c-teal-800-4)}
.calcbox.total .k,.calcbox.total small{color:var(--c-teal-150-5)}
.calcbox.total output{color:var(--on-accent)}
@media(max-width:900px){.agentgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.agentgrid .calcbox.total{grid-column:1/-1}}

/* Agent calculation: rule card */
.rulecard>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rulecard>summary::-webkit-details-marker{display:none}
.rulecard[open]>summary{margin-bottom:12px}
.rulecard small.muted{display:block;margin-top:4px}
/* Narrow cells: "সব দেখুন" collapses to its arrow so titles keep one line. */
.dash .wcell.w-s .dc-more,.dash .wcell.w-m .dc-more{font-size:0;gap:0;width:30px;height:30px;padding:0;justify-content:center}
.dash .wcell.w-s .dc-more .ic,.dash .wcell.w-m .dc-more .ic{width:16px;height:16px}
.dash .wcell.w-s .dc-h{gap:10px;padding-left:14px;padding-right:12px}
.dash .wcell.w-s .dc-t p{display:none}
.dash .wcell .dc-t h2{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.dash .wcell .dc-t h2 .cnt{margin-left:6px}
@media(max-width:1180px){.dash .wcell .dc-more{font-size:var(--fs-sm);width:auto;padding:6px 10px;gap:4px}}

/* R59: the module tabs and settings tabs are <nav> elements too; they are plain, non-sticky bars. */
.tabs,.settabs{position:static;z-index:auto;box-shadow:none}/* R59: grouped summary (agent calculation) */
.sumgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:0 0 18px}
.sumcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;box-shadow:var(--shadow)}
.sumcard h3{margin:0 0 8px;font-size:var(--fs-md);font-weight:700;color:var(--ink-3)}
.sumrow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.sumst{display:flex;flex-direction:column;gap:2px;min-width:0;padding:8px 10px;border-radius:var(--r-md);background:var(--c-mist-50-10)}
.sumst .v{font-size:var(--fs-2xl);font-weight:800;line-height:1.15;font-variant-numeric:tabular-nums;white-space:nowrap}
.sumst .v.ok{color:var(--ok)}.sumst .v.warn{color:var(--warn)}.sumst .v.bad{color:var(--bad)}.sumst .v.strong{color:var(--brand)}
.sumst .k{font-size:var(--fs-sm);color:var(--ink-3);line-height:1.35}
@media(max-width:900px){.sumgrid{grid-template-columns:minmax(0,1fr)}}

/* R59: working-context bar under the menu */
.ctxbar{background:linear-gradient(180deg,var(--c-mist-50-11),var(--c-mist-50));border-bottom:1px solid var(--line)}
.ctxform{max-width:1600px;margin:0 auto;padding:8px 18px;display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap}
.ctx-t{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-md);font-weight:700;color:var(--brand)}
.ctx-f{display:inline-flex;align-items:center;gap:8px;margin:0;font-size:var(--fs-md);color:var(--ink-3);font-weight:600}
.ctx-f select{width:auto;min-width:0;max-width:280px;min-height:34px;height:34px;padding:4px 30px 4px 10px;font-size:var(--fs-md);font-weight:600;color:var(--ink);border-radius:var(--r);background-color:var(--surface)}
.ctx-f.ro b{color:var(--ink);font-size:var(--fs-md)}
.ctx-clear{border:1px solid var(--c-red-150);background:var(--c-red-50-2);color:var(--bad);border-radius:var(--r-pill);padding:4px 12px;font:inherit;font-size:var(--fs-sm);font-weight:700;cursor:pointer;width:auto;min-height:0}
.ctx-add{font-size:var(--fs-md);font-weight:700;color:var(--brand)}
.ctx-manage{margin-left:auto;display:grid;place-items:center;width:32px;height:32px;border-radius:var(--r);color:var(--ink-3)}
.ctx-manage:hover{background:var(--surface);color:var(--brand)}
@media(max-width:720px){
  .ctxform{padding:8px 13px;gap:8px}
  .ctx-t{width:100%}
  .ctx-f{flex:1 1 100%}
  .ctx-f select{flex:1;max-width:none}
}
.alert.info{background:var(--c-sky-50-2);border-color:var(--c-sky-100);color:var(--c-sky-750)}
.subform{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line)}
.subform h3{margin:0 0 10px;font-size:var(--fs-base)}
.checkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px 14px;margin:6px 0 12px}
label.inline{display:inline-flex;align-items:center;gap:8px;font-weight:600;margin:0}
/* R60: agent pay */
.alert.warn{background:var(--c-amber-50);border-color:var(--c-amber-200);color:var(--c-orange-750-2)}
.ok-text{color:var(--ok);font-weight:700}
.pbar-plain{height:8px;border-radius:var(--r-pill);background:var(--c-cyan-100);overflow:hidden;margin-top:10px}
.pbar-plain i{display:block;height:100%;border-radius:var(--r-pill);background:linear-gradient(90deg,var(--c-teal-750-5),var(--c-teal-500))}
.inlinepay{position:relative}
.inlinepay>summary{list-style:none;cursor:pointer}
.inlinepay>summary::-webkit-details-marker{display:none}
.inlinepay form{position:absolute;right:0;top:calc(100% + 6px);z-index:15;display:flex;flex-direction:column;gap:8px;width:220px;padding:12px;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-3)}
/* R62: households */
.hh{padding:0;overflow:hidden}
.hh>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:14px;padding:12px 16px}
.hh>summary::-webkit-details-marker{display:none}
.hh>summary:hover{background:var(--c-mist-50-12)}
.hh-n{flex:none;min-width:58px;text-align:center;font-weight:800;color:var(--brand);background:var(--brand-ink);border-radius:var(--r);padding:4px 8px}
.hh-k{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.4}
.hh-k small{color:var(--ink-3)}
.hh-mf{flex:none;font-size:var(--fs-md);color:var(--ink-3)}
.hh[open]>summary{border-bottom:1px solid var(--line)}
.hh .tablewrap{margin:0;padding:8px 12px 12px}
.pager{display:flex;align-items:center;gap:10px;justify-content:center;margin:14px 0}
/* R63: canvassing mark form in the voter list */
.markform{display:flex;gap:4px;align-items:center}
.markform select{width:auto;min-height:30px;height:30px;padding:2px 24px 2px 8px;font-size:var(--fs-sm)}
.markform .btn{min-height:30px;padding:0 10px}
/* R64: age bars */
.agebars{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.agebars li{display:grid;grid-template-columns:72px minmax(0,1fr) 60px;gap:10px;align-items:center;font-size:var(--fs-md)}
.agebars .ab{height:10px;border-radius:var(--r-pill);background:var(--c-cyan-100-2);overflow:hidden}
.agebars .ab i{display:block;height:100%;border-radius:var(--r-pill);background:linear-gradient(90deg,var(--c-violet-400),var(--c-cyan-500))}
.agebars b{text-align:right;font-variant-numeric:tabular-nums}
@media(max-width:900px){.sumcard[style*="span 2"]{grid-column:auto!important}}
/* R66: where do I vote */
.lookupform{display:flex;gap:10px;align-items:center}
.lookupform input{flex:1;font-size:var(--fs-lg);min-height:46px}
.lookup{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1.4fr) 110px auto;gap:14px;align-items:center}
.lk-main{display:flex;flex-direction:column;min-width:0}
.lk-main strong{font-size:var(--fs-lg)}
.lk-main small{color:var(--ink-3)}
.lk-place,.lk-booth{display:flex;flex-direction:column;min-width:0}
.lk-k{font-size:var(--fs-sm);color:var(--ink-3);font-weight:600}
.lk-booth b{font-size:var(--fs-3xl);line-height:1.1;color:var(--brand)}
.lk-booth small,.lk-place a{font-size:var(--fs-sm)}
@media(max-width:860px){.lookup{grid-template-columns:1fr 1fr}.lk-main{grid-column:1/-1}}
.slip{max-width:520px;margin:0 auto;background:var(--surface);border:2px dashed var(--c-teal-300);border-radius:var(--r-lg);padding:20px 22px}
.slip header{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
.slip dl{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:10px 18px}
.slip dl>div{display:flex;flex-direction:column}
.slip dt{font-size:var(--fs-sm);color:var(--ink-3)}
.slip dd{margin:0;font-weight:700}
.slip dd.big{font-size:var(--fs-2xl);color:var(--brand)}
.slip footer{margin-top:14px;font-size:var(--fs-xs);color:var(--ink-3);text-align:right}
@media print{.slip{border:1.5px dashed var(--c-gray-650);box-shadow:none}}
/* R67: events calendar and check-list */
.calnav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px}
.calnav h2{margin:0;font-size:var(--fs-xl)}
.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal-h{font-size:var(--fs-sm);font-weight:700;color:var(--ink-3);text-align:center;padding:4px 0}
.cal-d{position:relative;min-height:112px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:6px 6px 22px;display:flex;flex-direction:column;gap:4px;min-width:0}
.cal-d.empty{background:transparent;border-style:dashed;opacity:.5}
.cal-d.today{border-color:var(--brand-2);box-shadow:0 0 0 2px rgb(var(--c-teal-750-rgb) / .18)}
.cal-n{font-size:var(--fs-sm);font-weight:700;color:var(--ink-3)}
.cal-d.today .cal-n{color:var(--brand)}
.cal-e{display:block;font-size:var(--fs-sm);line-height:1.35;padding:3px 6px;border-radius:var(--r-sm);text-decoration:none;color:var(--on-accent);background:var(--c-teal-750-5);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-e.t-Rally{background:var(--c-red-600)}.cal-e.t-Meeting{background:var(--c-blue-500)}.cal-e.t-Courtyard{background:var(--c-teal-750-5)}
.cal-e.t-Procession{background:var(--c-orange-600)}.cal-e.t-DoorToDoor{background:var(--c-violet-400)}.cal-e.t-Other{background:var(--c-blue-650)}
.cal-e.cancelled{opacity:.45;text-decoration:line-through}
.cal-add{position:absolute;right:6px;bottom:4px;font-weight:800;color:var(--ink-3);text-decoration:none;opacity:0;transition:opacity var(--t-fast)}
.cal-d:hover .cal-add{opacity:1}
@media(max-width:720px){.cal{grid-template-columns:1fr}.cal-h,.cal-d.empty{display:none}.cal-d{min-height:0;flex-direction:row;flex-wrap:wrap;align-items:center}.cal-d .cal-n{min-width:28px}.cal-add{opacity:1;position:static}}
.evhead{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap}
.evhead h2{margin:6px 0 2px}
.checklist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.checklist li{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r);background:var(--c-mist-50-13)}
.checklist li.done{background:var(--c-green-50)}
.checklist li.done .ck-t{color:var(--ink-3);text-decoration:line-through}
.checklist .ck,.checklist .ck-rm{margin:0}
.ckbox{width:26px;height:26px;border-radius:var(--r-sm);border:2px solid var(--c-teal-300);background:var(--surface);display:grid;place-items:center;font-weight:800;color:var(--on-accent);cursor:pointer;padding:0;min-height:0}
.checklist li.done .ckbox{background:var(--ok);border-color:var(--ok)}
.ck-t{flex:1;min-width:0;display:flex;flex-direction:column}
.ck-t small{font-size:var(--fs-xs);color:var(--ink-3);text-decoration:none}
.linkbtn{background:none;border:0;color:var(--ink-3);cursor:pointer;font:inherit;padding:4px 8px;min-height:0;width:auto}
.linkbtn:hover{color:var(--bad)}
/* R67: one more menu group -- keep the main menu on one line on laptop widths */
@media(min-width:901px) and (max-width:1240px){#mainnav .navgroup>button,#mainnav>a.navlink{padding:12px 8px;font-size:var(--fs-ui)}}
/* R68: routes */
.stops{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.stops li{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--r-md);background:var(--c-mist-50-13)}
.stops li.done{background:var(--c-green-50)}
.st-n{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--surface);border:2px solid var(--brand-2);font-weight:800;color:var(--brand)}
.stops li.done .st-n{background:var(--ok);border-color:var(--ok);color:var(--on-accent)}
.st-act{display:flex;align-items:center;gap:4px;flex:none}
.st-act form{margin:0}
.addstop{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px}
.addstop select{width:auto;min-width:200px}
.sheet-h{margin:18px 0 6px;font-size:var(--fs-base)}
.sheet td.box{width:28px;border:1px solid var(--c-mist-350)}
.sheet td.note{min-width:120px;border:1px solid var(--c-mist-350)}
@media print{.sheet{font-size:var(--fs-xs)}.sheet th,.sheet td{padding:3px 5px}}
/* R69: public sign-up and review */
.joinwrap{max-width:720px;margin:0 auto}
.joinhead{text-align:center;margin:8px 0 18px}
.joinhead svg{display:inline-block;width:36px;height:36px;border-radius:var(--r);flex:none}
.joinhead h1{margin:10px 0 4px;font-size:var(--fs-3xl)}
.joinhead p{margin:0;color:var(--ink-3)}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.kindpick{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.kind{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:2px solid var(--line);border-radius:var(--r-lg);cursor:pointer;margin:0}
.kind input{width:auto;margin-top:4px}
.kind span{display:flex;flex-direction:column}
.kind small{color:var(--ink-3);font-weight:500}
.kind:has(input:checked){border-color:var(--brand-2);background:var(--brand-ink)}
.joindone{text-align:center}
.signup .su-main{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.signup h3{margin:6px 0 2px}
.signup p{margin:4px 0}
.su-msg{background:var(--c-mist-50-13);border-radius:var(--r);padding:8px 10px;white-space:pre-line}
.su-act{display:flex;flex-direction:column;gap:8px;min-width:260px;max-width:420px}
@media(max-width:560px){.kindpick{grid-template-columns:1fr}}
/* R70: ward plan inputs */
.planin{width:110px;min-height:34px;text-align:right}
.planin.suggested{background:var(--c-amber-50-2);border-color:var(--c-amber-300)}
/* R71: weekly reach bars */
.wkbars{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:10px;align-items:end;height:200px;padding-top:6px}
.wk{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px;min-width:0}
.wk i{display:block;width:100%;max-width:46px;border-radius:8px 8px 3px 3px;background:linear-gradient(180deg,var(--c-cyan-400),var(--c-teal-750-5))}
.wk-v{font-size:var(--fs-xs);font-weight:700;color:var(--ink-2);font-variant-numeric:tabular-nums}
.wk small{font-size:var(--fs-xs);color:var(--ink-3);text-align:center;line-height:1.2}
@media(max-width:720px){.wkbars{height:160px;gap:4px}.wk small{font-size:9.5px}}
/* R72: report filter bar */
.rfilter .formgrid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}
/* R74: charts (dataviz method: validated categorical slots, 2px gaps, status with icon + label) */
.cv-hero{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:0 0 16px}
.cv-hero>div{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.cv-hero .k{font-size:var(--fs-sm);color:var(--ink-3);font-weight:600;display:flex;align-items:center;gap:6px}
.cv-hero b{font-size:var(--fs-3xl);line-height:1.15;font-variant-numeric:tabular-nums;color:var(--ink)}
.cv-hero small{font-size:var(--fs-sm);color:var(--ink-3)}
.cv-legend{display:flex;gap:16px;flex-wrap:wrap;margin:0 0 10px;font-size:var(--fs-md);color:var(--ink-2)}
.cv-legend span{display:inline-flex;align-items:center;gap:6px}
.cv-legend i,.sw.s1,.sw.s2,.sw.s3{width:12px;height:12px;border-radius:var(--r-xs);display:inline-block}
.s1{background:var(--c-sky-500)}.s2{background:var(--c-orange-450)}.s3{background:var(--c-green-600)}
.cv-rows{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.cv-rows li{display:grid;grid-template-columns:minmax(90px,200px) minmax(0,1fr) auto;gap:12px;align-items:center;font-size:var(--fs-md)}
.cv-l{color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cv-n{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:600;min-width:64px;text-align:right;white-space:nowrap}
.stk{display:flex;gap:2px;height:22px;border-radius:var(--r-xs);overflow:hidden;background:var(--c-mist-50-14)}
.stk i{display:flex;align-items:center;justify-content:center;min-width:3px;cursor:default}
.stk i:first-child{border-radius:4px 0 0 4px}.stk i:last-child{border-radius:0 4px 4px 0}.stk i:only-child{border-radius:var(--r-xs)}
.stk b{font-size:var(--fs-xs);font-weight:700;color:var(--on-accent)}
.stk i.s3 b{color:var(--c-teal-900)}
.bullet{display:block;height:14px;border-radius:var(--r-xs);background:var(--c-mist-50-14);overflow:hidden}
.bullet i{display:block;height:100%;border-radius:var(--r-xs)}
.bullet i.good{background:var(--c-green-700)}.bullet i.warn{background:var(--c-orange-550)}.bullet i.crit{background:var(--c-red-500)}.bullet i.unk{background:var(--c-cyan-350)}
.stico{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;font-size:var(--fs-xs);font-weight:800;color:var(--on-accent);vertical-align:middle}
.stico.good{background:var(--c-green-700)}.stico.warn{background:var(--c-orange-550)}.stico.crit{background:var(--c-red-500)}.stico.unk{background:var(--c-cyan-350)}
.cv-table{margin-top:14px}
.cv-table>summary{cursor:pointer;font-weight:600;color:var(--brand);font-size:var(--fs-md)}
.cv-tip{position:fixed;z-index:200;pointer-events:none;background:var(--c-cyan-900);color:var(--on-accent);font-size:var(--fs-sm);padding:6px 10px;border-radius:var(--r-sm);box-shadow:var(--shadow-2);white-space:nowrap}
@media(max-width:720px){.cv-rows li{grid-template-columns:1fr auto}.cv-rows .stk,.cv-rows .bullet{grid-column:1/-1;order:3}}
/* R75: report logo */
.rd-logo-img{max-height:64px;max-width:180px;object-fit:contain;flex:none}
.logo-preview{max-height:90px;max-width:260px;object-fit:contain;border:1px dashed var(--line);border-radius:var(--r);padding:6px;background:var(--surface)}
@media print{.rd-logo-img{max-height:56px}}
/* R76: snapshot comparison */
.cmpbar{display:flex;align-items:center;gap:10px;justify-content:flex-end;margin:0 0 10px}
.diff-sum{margin:0 0 10px;font-size:var(--fs-md)}
.diff td .delta{font-size:var(--fs-sm);font-weight:700;white-space:nowrap}
.diff td .delta.up{color:var(--ok)}.diff td .delta.down{color:var(--bad)}
.diff tr.d-added td{background:var(--c-green-50-2)}.diff tr.d-removed td{background:var(--c-red-50-3);color:var(--ink-3)}
.diff tr.d-same td{color:var(--ink-3)}
.diffcard{border-left:3px solid var(--brand-2)}
/* R77: report builder */
.savedlist{display:flex;flex-wrap:wrap;gap:8px}
.savedchip{display:inline-flex;align-items:center;gap:8px;padding:6px 6px 6px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
.savedchip small{color:var(--ink-3);font-size:var(--fs-xs)}
.savedchip form{margin:0}
.builder .checkgrid{margin-bottom:14px}

/* R79 — geography tree (union → ward → para → area), opens in place */
.gtree-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
.gtree{min-width:calc(260px + var(--cols) * 96px)}
.gt-row{display:grid;grid-template-columns:minmax(260px,1fr) repeat(var(--cols),minmax(88px,120px));align-items:center;border-bottom:1px solid var(--line);min-height:40px}
.gt-row>*{padding:8px 10px}
.gt-head{background:var(--bg);font-weight:600;font-size:.85rem;color:var(--ink-3);position:sticky;top:0}
.gt-head .gt-n{text-align:right;line-height:1.2}
.gt-total{font-weight:700;background:var(--bg);border-bottom:0}
.gt-name{padding-left:calc(10px + var(--d,0) * 22px);display:flex;align-items:center;gap:6px;min-width:0}
.gt-lv{font-size:.72rem;color:var(--ink-3);border:1px solid var(--line);border-radius:var(--r-pill);padding:0 7px;white-space:nowrap}
.gt-n{text-align:right;font-variant-numeric:tabular-nums}
.gt-n.zero{color:var(--ink-3)}
.gt-n.na{color:var(--ink-3);opacity:.6}
.gt-go{margin-left:2px;padding:0 6px;border-radius:var(--r-sm);text-decoration:none;color:var(--ink-3)}
.gt-go:hover{background:var(--bg);color:var(--brand)}
summary.gt-row{cursor:pointer;list-style:none}
summary.gt-row::-webkit-details-marker{display:none}
summary.gt-row .gt-name::before{content:"";width:0;height:0;border-left:6px solid currentColor;border-top:5px solid transparent;border-bottom:5px solid transparent;transition:transform var(--t-fast);flex:none}
details.gt[open]>summary.gt-row .gt-name::before{transform:rotate(90deg)}
.gt-row.leaf .gt-name::before{content:"";width:6px;flex:none}
summary.gt-row:hover{background:var(--bg)}
details.gt>summary.gt-row{font-weight:600}
details.gt details.gt>summary.gt-row{font-weight:500}
@media print{.gtree details.gt{display:block}.gtree-wrap{overflow:visible;border:0}}

/* R80 — task board (kanban) */
.kb{display:grid;grid-template-columns:repeat(4,minmax(250px,1fr));gap:14px;align-items:start;overflow-x:auto;padding-bottom:6px;scroll-snap-type:x proximity}
.kb-col{background:var(--bg);border:1px solid var(--line);border-top:3px solid var(--ink-3);border-radius:var(--r-md);min-height:220px;display:flex;flex-direction:column;scroll-snap-align:start;transition:box-shadow var(--t-fast),border-color var(--t-fast)}
.kb-in-progress{border-top-color:var(--brand)}
.kb-completed{border-top-color:var(--ok)}
.kb-cancelled{border-top-color:var(--bad)}
.kb-col.over{box-shadow:0 0 0 2px var(--brand) inset;background:var(--surface)}
.kb-h{display:flex;align-items:center;gap:8px;padding:12px 14px 8px;color:var(--ink-2)}
.kb-h h2{margin:0;font-size:1rem;flex:1}
.kb-count{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:0 9px;font-size:.8rem;font-variant-numeric:tabular-nums}
.kb-list{display:flex;flex-direction:column;gap:10px;padding:4px 10px 12px;flex:1;min-height:120px}
.kb-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:8px}
.kb-card[draggable=true]{cursor:grab}
.kb-card.dragging{opacity:.45;cursor:grabbing}
.kb-card.overdue{border-left:3px solid var(--bad)}
.kb-title{font-weight:600;color:var(--ink);text-decoration:none;line-height:1.35}
.kb-title:hover{color:var(--brand);text-decoration:underline}
.kb-meta{display:flex;flex-wrap:wrap;gap:6px}
.kb-meta .chip{font-size:.75rem;display:inline-flex;align-items:center;gap:4px}
.kb-meta .chip svg{width:14px;height:14px}
.kb-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:.8rem}
.kb-move select{font-size:.78rem;padding:3px 6px;width:auto;min-height:0}
.kb-empty{color:var(--ink-3);text-align:center;font-size:.85rem;margin:18px 0;border:1px dashed var(--line);border-radius:var(--r-sm);padding:14px}
.kb-more{padding:0 14px 12px;font-size:.8rem}
.kb-checks{display:flex;flex-direction:column;gap:6px;justify-content:end}
.kb-checks label.inline{display:flex;align-items:center;gap:8px;margin:0;font-weight:500}
.kb-checks input[type=checkbox]{width:auto;min-height:0;margin:0}
.kb-toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--bad-bg);color:var(--bad);border:1px solid var(--bad);padding:10px 16px;border-radius:var(--r);box-shadow:var(--shadow);z-index:200;max-width:calc(100vw - 32px)}
.kb-toast.ok{background:var(--ok-bg);color:var(--ok);border-color:var(--ok)}
@media (max-width:600px){.kb{grid-template-columns:repeat(4,82vw)}}
@media print{.kb{grid-template-columns:repeat(4,1fr);overflow:visible}.kb-move{display:none}}

/* R80 — performance scores */
.perf-cell{display:flex;align-items:center;gap:8px}
.perf-bar{flex:1;height:10px;background:var(--line-soft);border-radius:var(--r-pill);overflow:hidden;min-width:90px}
.perf-bar span{display:block;height:100%;background:var(--brand);border-radius:var(--r-pill)}
.perf-n{min-width:2.2em;text-align:right;font-variant-numeric:tabular-nums}
.perf-help{margin-top:14px}
@media print{.perf-bar span{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* R82 — task comments */
.tcomments{list-style:none;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:10px}
.tcomment{border:1px solid var(--line);border-radius:var(--r);padding:10px 12px;background:var(--surface)}
.tcomment.mine{border-left:3px solid var(--brand)}
.tc-head{display:flex;align-items:center;gap:8px;font-size:.88rem}
.tc-del{margin-left:auto}
.tc-body{margin:6px 0 0;white-space:normal;overflow-wrap:anywhere}
.tc-file{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:.88rem}
.tc-file svg,.tc-attach svg,.card h2 svg{width:18px;height:18px;vertical-align:-3px}
.tc-form textarea{width:100%}
.tc-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:8px}
.tc-attach{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-weight:500;margin:0}
.tc-attach input[type=file]{width:auto;max-width:100%}
.kb-counts{display:inline-flex;gap:8px;color:var(--ink-3);font-size:.75rem}
.kb-counts svg{width:13px;height:13px;vertical-align:-2px}

/* R83 — role templates */
.rt-keys{margin-top:4px;text-align:left}
.rt-keys summary{cursor:pointer;color:var(--brand);font-size:.8rem}
.rt-keys ul{margin:6px 0 0;padding-left:16px;font-size:.78rem;max-height:220px;overflow:auto}
.rt-keys code{font-size:.75rem}

/* R84 — backup status */
.bk-status .bk-row{display:flex;gap:14px;align-items:flex-start}
.bk-status .bk-row>svg{flex:none;color:var(--ok)}
.bk-status.stale{border-left:3px solid var(--bad)}
.bk-status.stale .bk-row>svg{color:var(--bad)}

/* R86 — API tokens + TV display */
.api-token{font-size:1rem;padding:8px 10px;background:var(--bg);border:1px dashed var(--brand);border-radius:var(--r-sm);display:inline-block;word-break:break-all;user-select:all}
.api-new{border-left:3px solid var(--ok)}
.api-res{border:1px solid var(--line);border-radius:var(--r);padding:10px 14px;margin:10px 0;display:flex;flex-direction:column;gap:6px}
body.tv{background:var(--c-teal-900-2);color:var(--c-mist-50-15);min-height:100vh;margin:0;padding:3vh 3vw;display:flex;flex-direction:column;gap:3vh;font-size:clamp(14px,1.4vw,28px)}
.tv-head{display:flex;justify-content:space-between;align-items:center;gap:2vw}
.tv-head h1{margin:0;font-size:2.4em;color:var(--on-accent)}
.tv-head p{margin:.2em 0 0;color:var(--c-teal-300-2);font-size:1.1em}
.tv-right{display:flex;align-items:center;gap:3vw}
.tv-count{text-align:center;background:var(--c-teal-800-5);border-radius:var(--r-lg);padding:.4em 1em}
.tv-count b{display:block;font-size:3em;line-height:1;color:var(--c-amber-300-2)}
.tv-count span{color:var(--c-teal-150-6)}
.tv-clock{font-size:3em;font-weight:700;font-variant-numeric:tabular-nums;color:var(--on-accent)}
.tv-grid{flex:1;display:grid;grid-template-columns:repeat(auto-fit,minmax(15em,1fr));gap:2vh 1.5vw;align-content:start}
.tv-tile{background:var(--c-teal-800-5);border-radius:var(--r-xl);padding:1.2em 1.4em;display:flex;flex-direction:column;gap:.3em;border-top:4px solid var(--c-teal-500-2)}
.tv-tile svg{width:1.8em;height:1.8em;color:var(--c-teal-350-2)}
.tv-tile b{font-size:3.2em;line-height:1.05;color:var(--on-accent);font-variant-numeric:tabular-nums}
.tv-tile span{color:var(--c-teal-150-6);font-size:1.05em}
.tv-tile.warn{border-top-color:var(--c-orange-350)}
.tv-tile.warn svg{color:var(--c-orange-350)}
.tv-foot{color:var(--c-teal-350-3);font-size:.9em}
body.tv.tv-stale .tv-foot::after{content:" · সংযোগ বিচ্ছিন্ন — শেষ তথ্য দেখানো হচ্ছে";color:var(--c-orange-350)}

/* R88 — locked working context */
.ctxbar.locked{background:var(--bg)}
.ctxbar.locked .chip{display:inline-flex;align-items:center;gap:4px;font-size:.78rem}

/* R90 — dashboard: no কার্যক্ষেত্র bar, tighter top, area in the banner */
body.page-dash .wrap{margin-top:12px}
@media(max-width:720px){body.page-dash .wrap{margin-top:0}}
.hero-area{display:inline-flex;align-items:center;gap:6px;background:rgb(var(--on-accent-rgb) / .14);border:1px solid rgb(var(--on-accent-rgb) / .28);border-radius:var(--r-pill);padding:0 4px 0 12px;color:var(--on-accent);margin:0}
.hero-area select{background:transparent;border:0;color:var(--on-accent);font:inherit;font-weight:600;font-size:var(--fs-md);min-height:34px;padding:4px 26px 4px 2px;width:auto;max-width:220px;cursor:pointer}
.hero-area select option{color:var(--ink)}
.hero-btn svg+svg{opacity:.85}
@media(min-width:721px) and (max-width:1100px){#mainnav .navgroup>button,#mainnav>a.navlink{padding:11px 6px;font-size:var(--fs-md)}}

/* R90 — contact timeline */
.tl{list-style:none;margin:0;padding:0 0 0 6px;position:relative}
.tl::before{content:"";position:absolute;left:19px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl-i{position:relative;display:flex;gap:12px;padding:8px 0}
.tl-dot{flex:none;width:28px;height:28px;border-radius:50%;background:var(--surface);border:2px solid var(--line);display:grid;place-items:center;color:var(--ink-3);z-index:1}
.tl-contact .tl-dot{border-color:var(--brand);color:var(--brand)}
.tl-message .tl-dot{border-color:var(--c-sky-500-2);color:var(--c-sky-500-2)}
.tl-task .tl-dot,.tl-status .tl-dot{border-color:var(--ok);color:var(--ok)}
.tl-i.overdue .tl-dot{border-color:var(--bad);color:var(--bad)}
.tl-b{flex:1;min-width:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:8px 12px}
.tl-i.overdue .tl-b{border-left:3px solid var(--bad)}
.tl-i.today .tl-b{border-left:3px solid var(--warn)}
.tl-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tl-head time{margin-left:auto;font-size:.8rem;font-variant-numeric:tabular-nums}
.tl-kind{font-size:.72rem}
.tl-meta{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:.82rem;color:var(--ink-3);margin-top:4px}
.tl-out{color:var(--ink-2);font-weight:600}
.tl-body{margin:6px 0 0;font-size:.9rem;overflow-wrap:anywhere}
.tl-more summary{cursor:pointer;font-size:.9rem;margin-top:6px}
.tl-follow{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px;font-size:.85rem}
.tl-done{display:inline;margin:0}
.tl-top{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.tl-top h2{margin:0}
.due.late{color:var(--bad)}
@media print{.tl-done{display:none}}

/* R91 — financial management */
.fin-tabs .tab{display:inline-flex;align-items:center;gap:5px}
.fin-kpis{margin-bottom:18px}
.fin-kpis .kpi.on{outline:2px solid var(--brand)}
.fin-entry h2{display:flex;align-items:center;gap:6px}
.fin-inline{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0}
.fin-inline input{width:auto;min-width:0;max-width:200px;min-height:32px;font-size:.85rem}
.fin-actbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.fin-actbar input{width:auto;min-width:220px;flex:1}
.fin-rev summary{list-style:none;cursor:pointer;display:inline-block}
.fin-rev form{display:grid;gap:4px;margin-top:6px;min-width:200px}
.fin-week td{position:relative}
.fin-bar{height:8px;border-radius:var(--r-xs);margin-bottom:2px}
.fin-bar.in{background:var(--ok)}
.fin-bar.out{background:var(--brand)}
.fin-top li{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(60px,1fr) auto;gap:8px;align-items:center;margin-bottom:6px}
.perf-bar.over span{background:var(--bad)}
.bve-bar{flex:1;height:12px;background:var(--line-soft);border-radius:var(--r-pill);overflow:hidden;display:flex;min-width:100px}
.bve-bar .s{background:var(--brand)}
.bve-bar .c{background:var(--c-orange-450-2)}
.bve-key{display:inline-block;width:12px;height:12px;border-radius:var(--r-xs);vertical-align:-1px}
.bve-key.s{background:var(--brand)}.bve-key.c{background:var(--c-orange-450-2)}
.fin-ledger td{font-variant-numeric:tabular-nums}
.fdoc{max-width:760px;margin:0 auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:26px 30px}
.fdoc-h{display:flex;align-items:center;gap:14px;border-bottom:2px solid var(--ink);padding-bottom:12px;margin-bottom:16px}
.fdoc-logo{max-height:56px;max-width:120px}
.fdoc-org{font-size:1.15rem}
.fdoc-t{margin-left:auto;text-align:right;display:flex;flex-direction:column;gap:3px;align-items:flex-end}
.fdoc-t h1{margin:0;font-size:1.3rem}
.fdoc-kv{display:grid;grid-template-columns:150px 1fr;gap:8px 14px;margin:0 0 16px}
.fdoc-kv dt{color:var(--ink-3)}
.fdoc-kv dd{margin:0;font-weight:600}
.fdoc-amt{border:1px dashed var(--ink-3);border-radius:var(--r);padding:12px 16px;display:grid;grid-template-columns:auto 1fr;gap:4px 14px;align-items:baseline;margin-bottom:34px}
.fdoc-amt b{font-size:1.5rem;font-variant-numeric:tabular-nums}
.fdoc-amt em{grid-column:1/-1;font-style:normal}
.fdoc-sign{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:40px}
.fdoc-sign div{border-top:1px solid var(--ink);padding-top:6px;text-align:center;font-size:.85rem;color:var(--ink-3)}
.fdoc-sign div span{display:block;color:var(--ink);font-weight:600;min-height:1.3em}
.fdoc-foot{margin-top:20px;font-size:.78rem;text-align:center}
@media print{.fdoc{border:0;padding:0;max-width:none}}
@media(max-width:600px){.fdoc{padding:16px}.fdoc-kv{grid-template-columns:110px 1fr}.fdoc-sign{grid-template-columns:repeat(2,1fr)}}

/* R92 — stock + requisitions */
.stock-kpis{margin-bottom:16px}
.stock-kpis .kpi.on{outline:2px solid var(--brand)}
.stock-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.stock-card{display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:14px;text-decoration:none;color:var(--ink);box-shadow:var(--shadow)}
.stock-card:hover{border-color:var(--brand)}
.stock-card.s-bad{border-left:4px solid var(--bad)}.stock-card.s-warn{border-left:4px solid var(--warn)}
.sc-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.sc-top .chip{display:inline-flex;gap:4px;align-items:center;white-space:nowrap}
.sc-big{font-size:.9rem;color:var(--ink-3)}
.sc-big span{font-size:1.8rem;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
.sc-bar{display:flex;height:8px;border-radius:var(--r-pill);overflow:hidden;background:var(--line-soft)}
.sc-bar .a{background:var(--brand)}.sc-bar .i{background:var(--c-orange-450-2)}
.sc-dl{display:grid;grid-template-columns:1fr auto;gap:2px 10px;margin:4px 0 0;font-size:.85rem}
.sc-dl dt{color:var(--ink-3)}.sc-dl dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}
.stock-move{margin:6px 0 14px}
.req-board{grid-template-columns:repeat(7,minmax(210px,1fr))}
@media (max-width:600px){.req-board{grid-template-columns:repeat(7,82vw)}}
.stock-move select{width:auto;min-width:0;max-width:220px;min-height:32px}

/* R93 — bulk actions */
.bulk-col{width:34px;text-align:center}
.bulk-col input{width:auto;min-height:0}
.bulkbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 12px;margin:0 0 10px;position:sticky;top:58px;z-index:15;box-shadow:var(--shadow)}
.bulkbar.active{border-color:var(--brand);background:var(--brand-ink)}
.bulkbar select{width:auto;min-width:0;max-width:260px;min-height:34px}
.bulkbar .inline{margin:0;display:flex;align-items:center;gap:6px}
.bulk-n{font-size:.9rem;color:var(--ink-2)}
.bulk-list{columns:2;column-gap:24px;margin:10px 0}
@media(max-width:600px){.bulkbar{top:0}.bulk-list{columns:1}}

/* ================= R94 — UI polish ================= */
/* Icons inside text, buttons and the top bar sit on the text baseline. */
.ic{vertical-align:-.18em;flex:none}
.btn .ic,.tab .ic,.chip .ic{vertical-align:middle}
.navgroup>button .chev{display:inline-flex;opacity:.65}
.navtoggle{align-items:center;justify-content:center}
@media(max-width:700px){.navtoggle{display:inline-flex}}
.userbox .bell{display:inline-flex;align-items:center}
.linkbtn .ic{vertical-align:middle}
.perm-key .ic,.permrow>.ic{color:var(--brand)}
.stico .ic{display:block}

/* Empty states: what is missing, and the next step. */
.empty-state{display:flex;gap:14px;align-items:flex-start;padding:18px 20px;margin:8px 0;
  border:1px dashed var(--line);border-radius:var(--r-lg);background:var(--surface);color:var(--ink-2)}
.empty-state>.ic{color:var(--ink-3);margin-top:2px}
.empty-state .es-t{margin:0;font-weight:700;color:var(--ink);line-height:1.6}
.empty-state .es-h{margin:2px 0 0;font-size:var(--fs-ui);color:var(--ink-2)}
.empty-state .es-a{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}
tr.empty-row>td{padding:10px!important}
tr.empty-row .empty-state,.dw-b .empty-state{margin:0;border:0;padding:8px 4px;background:transparent}

/* Skeleton / loading: any region marked aria-busy shimmers in place -- the old
   content keeps its size underneath, so nothing jumps when the new rows land. */
[aria-busy="true"]{position:relative;pointer-events:none}
[aria-busy="true"]::after{content:"";position:absolute;inset:0;border-radius:var(--r);
  background:linear-gradient(100deg,transparent 25%,var(--shimmer) 50%,transparent 75%),rgb(var(--shade-rgb) / .04);
  background-size:220% 100%,auto;animation:ems-shimmer 1.1s linear infinite}
.skeleton{display:block;height:1em;margin:.45em 0;border-radius:var(--r-sm);background:var(--line-soft);
  background-image:linear-gradient(100deg,transparent 25%,var(--shimmer) 50%,transparent 75%);background-size:220% 100%;animation:ems-shimmer 1.1s linear infinite}
@keyframes ems-shimmer{from{background-position:130% 0,0 0}to{background-position:-30% 0,0 0}}
@media (prefers-reduced-motion:reduce){[aria-busy="true"]::after,.skeleton{animation:none}}

/* Table density (per viewer, set by dems.js). */
.density-btn{display:inline-flex;align-items:center;gap:6px;margin:0 0 8px auto;padding:4px 10px;min-height:32px;width:auto;
  border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface);color:var(--ink-2);font:inherit;font-size:var(--fs-sm);cursor:pointer}
.density-btn:hover{border-color:var(--brand-2);color:var(--brand)}
.dense .table th,.dense .table td{padding:4px 9px;line-height:1.45;font-size:var(--fs-md)}
.dense .table .btn.sm{min-height:26px;padding:2px 9px}

/* Keyboard shortcut help. */
.kbd-help{position:fixed;inset:0;z-index:300;display:grid;place-items:center;padding:16px;background:rgb(var(--black-rgb) / .45)}
.kbd-help[hidden]{display:none}
.kbd-box{background:var(--surface);color:var(--ink);border-radius:var(--r-lg);box-shadow:var(--shadow-3);padding:20px 22px;width:min(420px,100%)}
.kbd-box h2{margin:0 0 10px;font-size:var(--fs-xl)}
.kbd-box dl{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;margin:0 0 12px;align-items:center}
.kbd-box dt{display:flex;gap:4px}
.kbd-box dd{margin:0}
kbd{display:inline-block;min-width:24px;padding:1px 7px;border:1px solid var(--line);border-bottom-width:2px;border-radius:var(--r-sm);
  background:var(--c-mist-50);font:600 12.5px/1.6 ui-monospace,Menlo,Consolas,monospace;text-align:center;color:var(--ink)}

/* Mobile: readable Bangla, 44px touch targets, no sideways page scroll. */
html{overflow-x:clip}
@media (max-width:700px),(pointer:coarse){
  body{font-size:var(--fs-base);line-height:1.75}
  input,select,textarea{font-size:var(--fs-lg);min-height:44px}   /* 16px stops iOS zooming on focus */
  .btn,.btn.sm,.tab,.linkbtn,.navgroup>button,nav#mainnav a,.density-btn{min-height:44px}
  .btn.sm{padding:6px 12px}
  .table .btn.sm,.table .linkbtn{min-height:44px}
  .bulkbar select,.kb-card select,.dash .hero-area select{min-height:44px;height:auto}
  .dash .hero button,.dash .hero .btn,.userbox a,.userbox button{min-height:44px}
  input[type=checkbox],input[type=radio]{min-height:0;width:20px;height:20px}
  .navtoggle{min-width:44px;min-height:44px}
}
@media (max-width:420px){
  h1{font-size:var(--fs-2xl);line-height:1.5}
  .wrap{padding-left:12px;padding-right:12px}
  .toolbar{flex-wrap:wrap}
}

/* Print: letterhead on every printed page set, page numbers, confidentiality line.
   Pages that print their own document header (reports, vouchers, challans) keep theirs. */
.print-head,.print-foot{display:none}
@media print{
  @page{margin:14mm 12mm 16mm;
    @bottom-right{content:"পাতা " counter(page) " / " counter(pages);font-size:9pt}}
  .print-head{display:flex;align-items:center;gap:12px;padding:0 0 8px;margin:0 0 12px;border-bottom:1.5px solid var(--ink)}
  .ph-logo{height:42px;width:auto}
  .ph-mark{font-weight:800;display:flex;align-items:center;gap:6px}
  .ph-mark svg{width:16px;height:16px;border-radius:var(--r-xs);flex:none}
  .ph-text{display:flex;flex-direction:column;line-height:1.35}
  .ph-text span{font-size:var(--fs-xs);color:var(--ink-2)}
  .ph-title{margin-left:auto;font-weight:700;font-size:var(--fs-md)}
  .print-foot{display:flex;justify-content:space-between;gap:12px;margin-top:16px;padding-top:6px;border-top:1px solid var(--line);font-size:10px;color:var(--ink-2)}
  body:has(.rd-head,.fdoc,.fv-sheet,.gp-doc) .print-head,body:has(.rd-head,.fdoc,.fv-sheet,.gp-doc) .print-foot{display:none}
  .density-btn,.kbd-help,.bulkbar{display:none!important}
  .empty-state{border:0;padding:4px 0}
  [aria-busy="true"]::after{display:none}
}

/* ================= R96 — dashboard widgets: drag to reorder, drag to resize ================= */
.dash .wcell{position:relative}
.dash .wdrag,.dash .wresize{position:absolute;z-index:4;display:grid;place-items:center;color:var(--d-ink3);opacity:0;transition:opacity var(--t-fast);touch-action:none}
.dash .wdrag{top:4px;left:50%;transform:translateX(-50%);width:40px;height:20px;padding:0;border:0;border-radius:var(--r-sm);background:transparent;cursor:grab}
.dash .wdrag .ic{transform:rotate(90deg)}
.dash .wresize{right:3px;bottom:3px;width:20px;height:20px;border-radius:var(--r-sm);cursor:ew-resize}
.dash .wcell:hover .wdrag,.dash .wcell:hover .wresize,.dash .wdrag:focus-visible{opacity:1}
.dash .wdrag:hover,.dash .wresize:hover{background:var(--d-soft);color:var(--d-ink)}
@media (hover:none){.dash .wdrag,.dash .wresize{opacity:.8}}
.dash .wcell.dragging{opacity:.55;outline:2px dashed var(--brand-2);outline-offset:3px;border-radius:var(--r-xl)}
.dash .wcell.dragging .wdrag{cursor:grabbing}
.dash .wcell.resizing{outline:2px solid var(--brand-2);outline-offset:3px;border-radius:var(--r-xl)}
.dash .wgrid.busy{user-select:none}
.dash .wcell .wsize-note{position:absolute;right:28px;bottom:6px;z-index:4;font-size:var(--fs-sm);font-weight:700;padding:2px 8px;border-radius:var(--r-pill);background:var(--brand);color:var(--on-accent)}
@media(max-width:720px){.dash .wresize{display:none}}   /* every widget is full width on phones */
@media print{.dash .wdrag,.dash .wresize{display:none}}

/* R97 — archive: the Super Administrator's delete page */
.purge-card{border-color:var(--bad)}

/* R97 — notifications: recipient pickers, message body, device card */
.push-pick select[multiple]{min-height:170px;padding:4px}
.select-filter{margin-bottom:6px;min-height:36px}
.push-body{font-size:var(--fs-lg);line-height:1.8;white-space:normal;margin:10px 0}
.push-card{border-left:4px solid var(--brand)}

/* R98 — বার্তা বক্স */
.inbox-search{margin:0 0 12px}
.inbox-search input{max-width:420px}
.inbox-list{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.inbox-list li+li{border-top:1px solid var(--line-soft)}
.inbox-list a{display:grid;grid-template-columns:minmax(0,190px) minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 16px;color:var(--ink);text-decoration:none}
.inbox-list a:hover{background:var(--brand-ink)}
.inbox-list .il-who,.inbox-list .il-sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inbox-list .il-sub b{font-weight:500}
.inbox-list li.unread .il-who,.inbox-list li.unread .il-sub b{font-weight:800}
.inbox-list li.unread{box-shadow:inset 3px 0 0 var(--brand)}
.inbox-list .il-time{font-size:var(--fs-sm);color:var(--ink-3);white-space:nowrap}
.badge-n{display:inline-block;min-width:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--brand);color:var(--on-accent);font-size:var(--fs-xs);font-weight:700;text-align:center}
.thread-h{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:flex-start;border-bottom:1px solid var(--line-soft);padding-bottom:10px;margin-bottom:12px}
.thread-h h2{margin:0}
.thread-acts form{display:flex;gap:6px;flex-wrap:wrap}
.msg{max-width:720px;margin:0 0 12px;padding:10px 14px;border:1px solid var(--line);border-radius:14px 14px 14px 4px;background:var(--surface)}
.msg.mine{margin-left:auto;border-radius:14px 14px 4px 14px;background:var(--brand-ink);border-color:transparent}
.msg.new{border-color:var(--brand-2);box-shadow:var(--shadow-1)}
.msg header{display:flex;justify-content:space-between;gap:10px;font-size:var(--fs-md);margin-bottom:4px}
.msg-body{line-height:1.8;overflow-wrap:anywhere}
.seen{text-align:right;font-size:var(--fs-sm);margin:-4px 0 12px}
.reply textarea{min-height:90px}
@media(max-width:640px){.inbox-list a{grid-template-columns:minmax(0,1fr) auto}.inbox-list .il-sub{grid-column:1/-1;grid-row:2;white-space:normal}}

/* ================= R100 — phone layout ================= */
/* Header: every control one size (they had grown from six separate mobile rules). */
.userbox a.logout .ic{display:none}
@media (max-width:700px){
  .topbar{padding:0 10px;gap:8px;min-height:58px}
  .topbar .brand{font-size:var(--fs-lg);gap:7px}
  .userbox{gap:6px}
  .topbar .navtoggle,.userbox a,.userbox .bell,.userbox a.avatarlink{box-sizing:border-box;width:40px;height:40px;min-width:40px;min-height:40px;
    padding:0;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--fs-sm)}
  .topbar .navtoggle{border-radius:var(--r-md)}
  .userbox a.avatarlink{border:1px solid rgb(var(--on-accent-rgb) / .35)}
  .userbox .avatar,.userbox .avatar-img{width:32px;height:32px;font-size:var(--fs-ui);border-width:0}
  .userbox a.logout .ic{display:block}
  .userbox a.logout .lbl{display:none}
  /* sync status: a coloured dot in the same round button; the words stay for screen readers */
  .userbox a.netstatus{background:transparent;font-size:0;color:transparent;border-color:rgb(var(--on-accent-rgb) / .35)}
  .userbox a.netstatus::before{content:"";width:12px;height:12px;border-radius:50%;background:var(--ns,var(--c-green-650));box-shadow:0 0 0 2px rgb(var(--on-accent-rgb) / .8)}
  .netstatus[data-state="OFFLINE"]{--ns:var(--c-mist-550)} .netstatus[data-state="SYNCING"]{--ns:var(--c-blue-450)}
  .netstatus[data-state="PENDING"]{--ns:var(--c-orange-550)} .netstatus[data-state="CONFLICT"]{--ns:var(--c-red-500)}
  .userbox .bell .badge{top:-3px;right:-3px;font-size:10px}
}
@media (max-width:360px){
  .topbar .brand{font-size:0}   /* the dot alone; the controls need the width */
  .topbar .brand svg{width:20px;height:20px}
}

/* Wide tables: on a phone each row becomes a card of "label: value" lines (dems.js
   adds the labels from the header row), so no column is hidden to the right. */
@media screen and (max-width:640px){   /* R106: screens only -- a printed page is always a normal table */
  .table.stack,.table.stack tbody{display:block;width:100%;border:0;background:transparent}
  .table.stack tr.stack-head{display:none}
  .table.stack tr{display:block;margin:0 0 10px;padding:6px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1)}
  .table.stack td{display:grid;grid-template-columns:minmax(90px,38%) minmax(0,1fr);gap:10px;align-items:start;padding:7px 0;border:0;border-bottom:1px solid var(--line-soft);text-align:left!important;white-space:normal!important;width:auto!important}
  .table.stack td:last-child{border-bottom:0}
  .table.stack td::before{content:attr(data-label);font-size:var(--fs-sm);font-weight:700;color:var(--ink-3)}
  .table.stack td.nolabel{display:block}
  .table.stack td.nolabel::before{content:none}
  .table.stack td.rowacts-cell,.table.stack td .rowacts{white-space:normal}
  .table.stack td .rowacts{display:flex;flex-wrap:wrap;gap:6px}
  .table.stack td .rowacts form{display:inline-flex;margin:0}
  .table.stack tr.total{background:var(--brand-ink)}
  .table.stack tr.empty-row{background:transparent;border:0;box-shadow:none;padding:0}
  .table.stack tr.empty-row td{display:block;border:0}
  .table.stack tr.empty-row td::before{content:none}
  .tablewrap:has(> .table.stack){overflow:visible}
  /* report bars take the room the totals need */
  .rd-bar{display:none}
  .report-doc .table th,.report-doc .table td{padding:8px 6px;font-size:var(--fs-md)}
  .report-doc .tablewrap{padding:6px 0}
}

/* Geography tree: the area name stays put while the numbers scroll, with a hint. */
@media (max-width:760px){
  .gtree .gt-name{position:sticky;left:0;z-index:1;background:var(--surface);box-shadow:6px 0 8px -8px rgb(var(--shade-rgb) / .35)}
  .gtree{min-width:calc(150px + var(--cols) * 80px)}
  .gt-row{grid-template-columns:minmax(150px,1fr) repeat(var(--cols),minmax(76px,96px))}
  .gtree-wrap::before{content:"← ডানে-বাঁয়ে সরিয়ে সব কলাম দেখুন →";display:block;position:sticky;left:0;width:max-content;max-width:100%;font-size:var(--fs-sm);color:var(--ink-3);padding:6px 10px}
  .gt-name{padding-left:calc(6px + var(--d,0) * 10px);gap:4px}
  .gt-name .gt-lv{display:none}   /* the level chip (ইউনিয়ন/ওয়ার্ড…) — the indentation already says it */
}

/* R102 — the voter list on a computer screen: the whole width, the table scrolls in its own
   box with the column names pinned on top, and more rows per page. */
@media (min-width:900px){
  /* R119: the page keeps the header's width (the table scrolls in its own box) -- it was wider than the heading */
  /* R120: one scroll, the page's -- a box scrolling inside the scrolling page ran out of rows and then
     carried the page past its end. The column names stay pinned under the menu bar (--navh, dems.js);
     a table wider than the page still scrolls sideways in its box. */
  .tablewrap.tall.fits,.tablewrap.tall.fits .tablewrap,.tablewrap.tall.fits .table{overflow:visible}
  .tablewrap.tall .table tr:first-child th{position:sticky;top:var(--navh,0px);z-index:2;box-shadow:0 1px 0 var(--line);background:var(--surface)}
  .voterlist td{white-space:nowrap}
}
/* R103 — one voter, one line: every column as narrow as its content (no spread-out
   gaps); the address takes what is left and is cut with "…" (whole text on hover). */
.voterlist th{white-space:normal;line-height:1.25}
.voterlist th,.voterlist td{width:1%}
.voterlist td{white-space:nowrap}
.voterlist .c-address_bn{width:auto}
.voterlist td.c-address_bn{max-width:340px;overflow:hidden;text-overflow:ellipsis}
.voterlist .c-voter_no,.voterlist .c-serial_no,.voterlist .c-voter_area_code,.voterlist .c-ward_no,.voterlist .c-gender{padding-left:7px;padding-right:7px}
.voterlist .markform{display:flex;gap:4px;flex-wrap:nowrap}
.colpick{margin:0 0 12px}
.colpick>summary{cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:var(--fs-ui);padding:6px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.colpick form{margin-top:10px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
.colpick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px 14px}
.colpick-grid label{display:flex;align-items:center;gap:6px;margin:0;font-weight:400}
.colpick-grid input{width:auto}
/* R103 — rows that open in place (data-expand) */
[data-expand]{cursor:pointer}
.exp-ch{display:inline-flex;width:1.1em;color:var(--ink-3);transition:transform var(--t-fast);vertical-align:middle}
[data-expand][aria-expanded="true"] .exp-ch{transform:rotate(90deg)}
@media screen and (max-width:640px){   /* R106: phones only (list tables carry .stack at every width) */
  .table.stack tr.expand-row{padding:6px}
  .table.stack tr.expand-row>td{display:block}
  .table.stack tr.expand-row>td::before{content:none}
}
tr.expand-row>td{background:var(--c-mist-50);padding:8px 10px 12px}
tr.expand-row:hover>td{background:var(--c-mist-50)}
.expand-box{grid-column:1/-1;margin:4px 0 10px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r);background:var(--c-mist-50)}
.expand-box .tablewrap,.expand-row .tablewrap{margin:0}
.exp-toggle{background:none;border:0;padding:0 4px;color:var(--brand);cursor:pointer;font:inherit;text-decoration:underline}
/* R103 — family order: generations indented, brothers and sisters bracketed together */
.fam td.fam-name{white-space:nowrap}
.fam tr.fam-d1 td.fam-name{padding-left:28px}
.fam tr.fam-d2 td.fam-name{padding-left:48px}
.fam tr.fam-d3 td.fam-name{padding-left:68px}
.fam tr.fam-sib td:first-child{box-shadow:inset 3px 0 0 var(--brand)}
.fam tr.fam-sib-first td{border-top:2px solid var(--line)}
.hh-pick.rows{display:block}
.hh-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 12px;align-items:start;padding:5px 4px;border-bottom:1px solid var(--line-soft)}
.hh-row:hover{background:var(--c-mist-50-2)}
.fam .rel{display:flex;flex-wrap:wrap;gap:3px}
.fam .rel .chip{white-space:nowrap}
.fam .btn.sm{white-space:nowrap}
.per-pick{margin-left:12px;font-size:var(--fs-md)}
.per-pick .chip{text-decoration:none}
/* households: merge picker */
.hh-pick{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 12px;align-items:start}
.hh-pick label{margin:0;font-weight:400}
.hh-pick .muted{font-size:var(--fs-sm)}
.hh-sugg{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;margin:0 0 8px;background:var(--surface)}

/* R94 — dark mode, prepared but OFF by default. It applies only when the owner
   sets সেটিং → প্রদর্শন → ডার্ক মোড = "ডিভাইস অনুযায়ী" (View adds
   data-dark="auto" to <html>) AND the device asks for dark. Only tokens change
   here; no rule below the token blocks names a colour. Generated from how each
   token is used: light fills become dark fills, dark text becomes light text,
   accent colours stay. */
@media (prefers-color-scheme:dark){
  :root[data-dark="auto"]{
    --bg:#0e181a; --surface:#152325; --line:#26393c; --line-soft:#1c2d30;
    --surface-2:#122022;
    --ink:#e3eeef; --ink-2:#b3c6c9; --ink-3:#88a0a4;
    --brand:#178a83; --brand-2:#1f9b93; --brand-ink:#173a3b;
    --ok:#5fd08e; --ok-bg:#16301f; --warn:#f0b64a; --warn-bg:#33280f; --bad:#f08c8c; --bad-bg:#3a1c1c; --kin-f:#f08ac0;
    --shade-rgb:0 0 0;
    --shadow-1:0 1px 2px rgb(0 0 0 / .4); --shadow-2:0 2px 6px rgb(0 0 0 / .45),0 8px 20px rgb(0 0 0 / .35); --shadow-3:0 4px 10px rgb(0 0 0 / .5),0 18px 40px rgb(0 0 0 / .45);
    color-scheme:dark;
    --shimmer:rgb(255 255 255 / .06);
    --c-amber-200:#6b582e;
    --c-amber-50:#3b311c;
    --c-amber-50-2:#3b321c;
    --c-blue-50:#1c273b;
    --c-cyan-100:#213135;
    --c-cyan-100-2:#223335;
    --c-cyan-150:#223035;
    --c-cyan-250:#415458;
    --c-gray-600:#cccccc;
    --c-green-150:#2e6b3f;
    --c-green-50:#1c3b25;
    --c-green-50-2:#1c3b25;
    --c-green-750:#b0e8cc;
    --c-indigo-250:#3d2e6b;
    --c-mist-50:#203737;
    --c-mist-50-10:#223535;
    --c-mist-50-11:#1d3a3a;
    --c-mist-50-12:#213535;
    --c-mist-50-13:#233434;
    --c-mist-50-14:#223235;
    --c-mist-50-2:#203737;
    --c-mist-50-3:#203636;
    --c-mist-50-4:#243333;
    --c-mist-50-5:#1d3a3a;
    --c-mist-50-6:#203237;
    --c-mist-50-7:#1e3838;
    --c-mist-50-8:#1f3338;
    --c-mist-50-9:#213636;
    --c-orange-150:#6b562e;
    --c-orange-50:#3b301c;
    --c-orange-50-2:#3b2f1c;
    --c-orange-50-3:#3b301c;
    --c-orange-50-4:#3b301c;
    --c-orange-650:#e8c8b0;
    --c-orange-750-2:#e8d3b0;
    --c-orange-900:#e8d3b0;
    --c-pink-300:#6b2e4e;
    --c-pink-50:#3b1c2a;
    --c-red-100:#3b1c1c;
    --c-red-150:#3b1c1c;
    --c-red-300:#6b2e2e;
    --c-red-50:#3b1c1c;
    --c-red-50-2:#3b1c1c;
    --c-red-50-3:#3b1c1c;
    --c-red-700:#e8b0b0;
    --c-sky-100:#1c2f3b;
    --c-sky-50:#1c2f3b;
    --c-sky-50-2:#1c2f3b;
    --c-sky-750:#b0d4e8;
    --c-teal-100:#1f3838;
    --c-teal-100-2:#233434;
    --c-teal-100-3:#1f3838;
    --c-teal-100-4:#223535;
    --c-teal-150:#415858;
    --c-teal-150-2:#213636;
    --c-teal-200-2:#37625f;
    --c-teal-250:#2f6a67;
    --c-teal-50:#1c3b35;
    --c-teal-800-3:#b0e7e8;
    --c-teal-900:#b0e8da;
  }
  :root[data-dark="auto"] .dash{
    --d-ink:#e3eeef;--d-ink2:#b3c6c9;--d-ink3:#88a0a4;--d-line:#26393c;--d-soft:#1a2a2d;--d-soft2:#203235;
  }
}

/* R104 — the voter list in two lines per voter: two related fields share a column */
.voterlist.two th,.voterlist.two td{vertical-align:top;line-height:1.35}
.voterlist.two .sub{display:block;color:var(--ink-3);font-size:var(--fs-sm);font-weight:400;margin-top:2px}
.voterlist.two th .sub{font-weight:700}
.voterlist.two td.c-address_bn{white-space:normal;min-width:220px;max-width:300px;overflow:visible}
.voterlist.two .addr{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.voterlist .addnum{display:inline-flex;vertical-align:middle;color:var(--brand)}
/* R104 — কোথায় ভোট: numbers on file, and the send panel under each result */
.lookup .lk-phones{grid-column:1/-1;font-size:var(--fs-md)}
.lookup .lk-send{grid-column:1/-1;border-top:1px solid var(--line-soft);padding-top:8px}
.lookup .lk-send>summary{cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--brand)}
.lookup .lk-send form{margin-top:10px}
.slip-text{white-space:pre-wrap;font:inherit;font-size:var(--fs-md);margin:8px 0 0;padding:8px 10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm)}
/* R104 — রিপোর্ট sub-categories */
.rep-cats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--line-soft)}
.rep-cats .chip{text-decoration:none;font-size:var(--fs-md);padding:5px 11px}
.rep-list{display:flex;flex-wrap:wrap}
@media (min-width:861px){#mainnav>.navgroup:last-child .navmenu{left:auto;right:0}}
/* R105 — রিপোর্ট menu: sections with their sub-menus, two columns on a computer */
.navmenu .navsec{break-inside:avoid;padding:4px 0 6px}
.navmenu .navhead{display:block;padding:8px 11px 3px;font-size:var(--fs-sm);font-weight:700;color:var(--ink-3);letter-spacing:.2px}
.navmenu a.navsub{padding:6px 11px 6px 22px;font-size:var(--fs-md)}
@media (min-width:861px){.navmenu.wide{columns:2;column-gap:8px;min-width:470px}.navmenu.wide>a{column-span:all}}
.rep-cats{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px 18px}
.rep-sec{display:flex;flex-wrap:wrap;gap:5px;align-items:center;padding:6px 8px;border-radius:var(--r)}
.rep-sec.on{background:var(--brand-ink)}
.rep-sec-h{flex-basis:100%;font-size:var(--fs-sm);font-weight:700;color:var(--ink-3)}

/* R106 — printing the voter list: landscape, small type, every chosen column on the page */
@page vlist{size:A4 landscape;margin:10mm 8mm 12mm}
@media print{
  body:has(.voterlist){page:vlist}   /* R114: on body -- a named page set lower down broke the page before it (a blank first page) */
  .tablewrap.tall{max-height:none;overflow:visible}
  .voterlist{font-size:10px}
  .voterlist th,.voterlist td{width:auto;padding:3px 4px;font-size:10px;white-space:normal!important;position:static!important;box-shadow:none!important}
  .voterlist td.c-voter_no,.voterlist td.c-gender{white-space:nowrap!important}
  .voterlist.two .sub{font-size:9.5px}
  .voterlist.two td.c-address_bn{min-width:0;max-width:none}
  .voterlist.two .addr{display:inline;-webkit-line-clamp:unset;overflow:visible}
  .voterlist tr{break-inside:avoid}
  .voterlist .addnum{display:none}
  .live-meta{font-size:10px}
}
/* R108 — link to a house's own page from a বাড়ি মেলান row */
.hh-open{margin-left:6px;font-size:var(--fs-md);color:var(--brand)}
/* R109 — house panels: open / tick to merge / rename in one row; the merge bar; suggestion names */
.hh-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:0 12px 12px}
.hh-tools .inline{margin:0;font-weight:400}
.hh-rename{display:flex;gap:6px;align-items:center}
.hh-rename input{width:auto;min-width:200px;padding:5px 8px;font-size:var(--fs-md)}
.hh-mergebar{position:sticky;bottom:8px;z-index:3;box-shadow:var(--shadow-2)}
.hh-sugg .hh-sugg-name{width:auto;min-width:180px;padding:5px 8px;font-size:var(--fs-md)}
/* R110 — গোষ্ঠী list: the merge tick sits beside each group, visible without opening it */
.gs-item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start}
.gs-tick{margin:0;padding-top:17px;cursor:pointer}
.gs-tick input{width:20px;height:20px;accent-color:var(--brand)}
.gs-item>details{min-width:0}
.hh .hh-k .chip{align-self:flex-start;display:inline-block;width:auto;margin-right:4px}
/* R112 — voucher / money receipt: one A4 page, two copies (receiver above, office below), a cut line */
@page fvpage{size:A4 portrait;margin:8mm 10mm}
.fv-actions{max-width:820px;margin:0 auto 12px}
.fv-sheet{max-width:820px;margin:0 auto}
.fv-part{position:relative;overflow:hidden;background:var(--surface);border:1.5px solid var(--brand);border-radius:var(--r-lg);padding:0 0 10px;
  background-image:radial-gradient(circle at 100% 0,var(--brand-ink) 0,transparent 42%),repeating-linear-gradient(135deg,transparent 0 14px,var(--line-soft) 14px 15px)}
.fv-office{border-style:solid;border-color:var(--ink-3)}
.fv-head{display:flex;align-items:center;gap:12px;padding:12px 18px 8px}
.fv-logo{max-height:46px;max-width:110px}
.fv-mark{display:inline-flex;width:42px;height:42px;border-radius:50%;align-items:center;justify-content:center;background:var(--brand);color:var(--brand-ink)}
.fv-org{display:flex;flex-direction:column;line-height:1.3}
.fv-org b{font-size:1.08rem}
.fv-org span{font-size:.8rem;color:var(--ink-3)}
.fv-copy{margin-left:auto;border:1.5px solid var(--brand);color:var(--brand);border-radius:var(--r-pill);padding:3px 12px;font-weight:700;font-size:.82rem;white-space:nowrap}
.fv-office .fv-copy{border-color:var(--ink-2);color:var(--ink-2)}
.fv-band{display:flex;align-items:center;gap:18px;background:var(--brand);color:var(--brand-ink);padding:8px 18px;margin:2px 0 10px}
.fv-office .fv-band{background:var(--ink-2)}
.fv-band h1{margin:0;font-size:1.25rem;letter-spacing:.3px;color:inherit}
.fv-no{display:flex;flex-direction:column;line-height:1.15;font-size:.78rem;opacity:.95}
.fv-no:first-of-type{margin-left:auto}
.fv-no b{font-size:.98rem;font-variant-numeric:tabular-nums}
.fv-body{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:14px;padding:0 18px}
.fv-kv{margin:0;display:grid;gap:5px}
.fv-kv div{display:grid;grid-template-columns:112px minmax(0,1fr);gap:8px;border-bottom:1px dotted var(--line);padding-bottom:4px}
.fv-kv dt{color:var(--ink-3);font-size:.86rem}
.fv-kv dd{margin:0;font-weight:600;font-size:.92rem;overflow-wrap:anywhere}
.fv-amt{align-self:start;border:2px solid var(--brand);border-radius:var(--r-md);padding:10px 12px;text-align:center;background:var(--surface)}
.fv-amt span{display:block;font-size:.8rem;color:var(--ink-3)}
.fv-amt b{display:block;font-size:1.65rem;font-variant-numeric:tabular-nums;color:var(--brand);margin:2px 0}
.fv-amt em{display:block;font-style:normal;font-size:.8rem;line-height:1.35}
.fv-stamp{position:absolute;right:26px;top:118px;transform:rotate(-12deg);border:3px double currentColor;border-radius:var(--r-sm);padding:3px 12px;font-weight:800;font-size:1rem;opacity:.75;color:var(--ink-3)}
.fv-stamp.ok{color:var(--c-green-700,var(--brand))}
.fv-stamp.warn{color:var(--c-amber-700,var(--ink-2))}
.fv-stamp.bad{color:var(--c-red-700,var(--ink))}
.fv-dup{position:absolute;left:50%;top:52%;transform:translate(-50%,-50%) rotate(-18deg);font-size:3.2rem;font-weight:800;color:var(--ink);opacity:.06;pointer-events:none}
.fv-sign{display:flex;gap:18px;padding:30px 18px 4px;margin-top:auto}
.fv-sign div{flex:1;border-top:1px solid var(--ink);padding-top:4px;text-align:center;font-size:.78rem;color:var(--ink-3)}
.fv-sign div span{display:block;color:var(--ink);font-weight:600;min-height:1.2em}
.fv-foot{display:flex;justify-content:space-between;gap:10px;padding:6px 18px 0;font-size:.72rem;color:var(--ink-3)}
.fv-cut{position:relative;border-top:2px dashed var(--ink-3);margin:22px 0;text-align:center}
.fv-cut span{position:relative;top:-.72em;background:var(--bg,var(--surface));padding:0 10px;font-size:.75rem;color:var(--ink-3)}
@media print{
  .fv-actions{display:none}
  .fv-sheet{max-width:none}
  .fv-part{height:128mm;box-sizing:border-box;break-inside:avoid;display:flex;flex-direction:column}
  .fv-part,.fv-band,.fv-mark,.fv-amt b,.fv-stamp{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .fv-cut{margin:5mm 0}
  .fv-cut span{background:var(--surface)}
}
@media(max-width:640px){.fv-body{grid-template-columns:minmax(0,1fr)}.fv-band{flex-wrap:wrap;gap:8px}.fv-stamp{top:auto;bottom:70px}}
/* R112 — গোষ্ঠী ম্যাপিং: the map beside the table; the campaign card on a group's page */
.gm-layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:16px;align-items:start}
.gm-tree{position:sticky;top:10px;max-height:calc(100vh - 30px);overflow:auto;padding:12px 14px}
.gm-tree h2{margin:0 0 8px;font-size:1rem}
.gm-tree details{margin:2px 0 2px 4px}
.gm-tree summary{cursor:pointer;padding:3px 0}
.gm-tree ul{list-style:none;margin:2px 0 6px;padding-left:14px}
.gm-tree li{padding:2px 0;font-size:var(--fs-md)}
.gm-tree a{text-decoration:none;color:var(--ink)}
.gm-tree a.on,.gm-all.on{color:var(--brand);font-weight:700}
.gm-all{display:block;margin-bottom:6px}
.gm-camp-now{display:flex;flex-wrap:wrap;gap:10px 28px}
.gm-camp-now>div{display:flex;flex-direction:column;gap:2px}
@media(max-width:900px){.gm-layout{grid-template-columns:minmax(0,1fr)}.gm-tree{position:static;max-height:none}}

/* R113 — গোষ্ঠী on A4 (gosthi_print.php): a letterhead band, the group(s), members in family order */
@page gpage{size:A4 portrait;margin:10mm 9mm 12mm;@bottom-right{content:"পাতা " counter(page) " / " counter(pages);font-size:8pt}}
.gp-actions{max-width:1000px;margin:0 auto 12px}
.gp-doc{max-width:1000px;margin:0 auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:0 0 12px}
.gp-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 18px;align-items:end;padding:16px 20px 12px;border-bottom:3px solid var(--brand);
  background:linear-gradient(180deg,var(--c-teal-50),var(--surface));border-radius:14px 14px 0 0}
.gp-org{grid-column:1/-1;display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.gp-org b{font-size:1rem}
.gp-org span{font-size:.8rem;color:var(--ink-3)}
.gp-kind{display:inline-block;font-size:.72rem;font-weight:700;letter-spacing:.3px;color:var(--brand);border:1.5px solid var(--brand);border-radius:var(--r-pill);padding:1px 9px}
.gp-title h1{margin:4px 0 2px;font-size:1.35rem}
.gp-title p{margin:0;color:var(--ink-2);font-size:.86rem}
.gp-stats{display:flex;gap:6px;margin:0;flex-wrap:wrap;justify-content:flex-end}
.gp-stats div{border:1px solid var(--line);border-radius:var(--r);padding:4px 10px;text-align:center;background:var(--surface);min-width:70px}
.gp-stats dt{font-size:.7rem;color:var(--ink-3)}
.gp-stats dd{margin:0;font-weight:700;font-size:.95rem;font-variant-numeric:tabular-nums}
.gp-t{width:100%;border-collapse:collapse;font-size:.8rem;table-layout:fixed}
.gp-t col.c-n{width:30px}.gp-t col.c-name{width:15%}.gp-t col.c-rel{width:15%}.gp-t col.c-pm{width:16%}.gp-t col.c-age{width:36px}
.gp-t col.c-addr{width:22%}.gp-t col.c-vno{width:12%}.gp-t col.c-ph{width:10%}
.gp-t th{background:var(--brand);color:var(--brand-ink);font-weight:700;text-align:left;padding:5px 6px;font-size:.76rem}
.gp-t td{padding:4px 6px;border-bottom:1px solid var(--line-soft);vertical-align:top;overflow-wrap:anywhere}
.gp-t td.num,.gp-t th:nth-child(1),.gp-t th:nth-child(5){text-align:right}
/* R114: a whole group was kept together -- one taller than the space left moved to the next page and left page 1 blank */
.gp-t tr{break-inside:avoid}
.gp-gh{break-after:avoid}
.gp-gh td{background:var(--brand-ink);border-top:2px solid var(--brand);padding:6px 8px;font-size:.82rem}
.gp-gh td>*{margin-right:12px}
.gp-gh td>span:not(.chip):not(.gp-gn){color:var(--ink-2)}
.gp-gn{display:inline-flex;min-width:22px;height:22px;border-radius:50%;align-items:center;justify-content:center;background:var(--brand);color:var(--brand-ink);font-size:.72rem;font-weight:700;margin-right:8px}
.gp-t tr.gp-d1 .gp-name{padding-left:16px}.gp-t tr.gp-d2 .gp-name{padding-left:28px}.gp-t tr.gp-d3 .gp-name{padding-left:40px}
.gp-t tr.gp-sib td:nth-child(2){border-left:3px solid var(--brand-2)}
.gp-t tr.gp-sib-first td{border-top:1px solid var(--line)}
.gp-name small{color:var(--ink-3)}
.gp-addr{font-size:.74rem;color:var(--ink-2)}
.gp-ph{font-size:.74rem}
.gp-notes{margin:14px 20px 0;border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;break-inside:avoid}
.gp-notes h2{margin:0 0 4px;font-size:.9rem}
.gp-lines span{display:block;border-bottom:1px dotted var(--ink-3);height:24px}
.gp-sign{display:flex;gap:40px;margin-top:26px}
.gp-sign div{flex:1;border-top:1px solid var(--ink);padding-top:3px;text-align:center;font-size:.76rem;color:var(--ink-3)}
.gp-foot{display:flex;justify-content:space-between;gap:10px;padding:10px 20px 0;font-size:.72rem;color:var(--ink-3)}
.gm-pr{color:var(--ink-3);vertical-align:middle}
.gm-pr:hover{color:var(--brand)}
@media print{
  .gp-actions{display:none}
  .gp-doc{max-width:none;border:0;border-radius:0;padding:0}
  .gp-head{border-radius:0;padding:0 0 8px}
  .gp-head,.gp-t th,.gp-gh td,.gp-gn,.gp-kind{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .gp-t{font-size:8.4pt}
  .gp-t thead{display:table-header-group}
  .gp-notes,.gp-foot{margin-left:0;margin-right:0;padding-left:0;padding-right:0}
}
@media screen and (max-width:640px){.gp-head{grid-template-columns:minmax(0,1fr)}.gp-stats{justify-content:flex-start}.gp-doc{overflow-x:auto}.gp-t{min-width:760px}}
/* R113 — finance: entries outside the ledger balance, list filters, totals by category / method */
.fin-ledger tr.fin-open td{color:var(--ink-3);background:var(--bg)}
.fin-ledger tr.fin-open td:nth-child(6),.fin-ledger tr.fin-open td:nth-child(7){text-decoration:line-through dotted;text-decoration-color:var(--line)}
.fin-filter{margin:6px 0 10px;padding:10px 0;border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft)}
.fin-sums{margin-top:14px}
@media print{.fin-ledger tr.fin-open td{-webkit-print-color-adjust:exact;print-color-adjust:exact}.fin-sums .dw{break-inside:avoid}}

/* R114 — printing: A4 unless a page asks otherwise; named pages on body (never a forced break
   before the content); a form holding a table prints the table; nothing clipped or kept whole;
   the columns a viewer left out; text size chosen in the print dialog or fitted automatically */
@page{size:A4}
@media print{
  body:has(.gp-doc){page:gpage}
  body:has(.fv-sheet){page:fvpage}
  form:has(table){display:block!important}
  form:has(table) :is(input,select,textarea,button){display:none!important}
  main :is(.card,.dw,.dw-b,.report-doc,.hh,.gm-main,.inbox-list,.tablewrap,details,.expand-box){overflow:visible!important;max-height:none!important}
  .gm-layout{display:block}
  main table :is(th,td){overflow-wrap:break-word}
  .pcol-off{display:none!important}
  .col-rsz{display:none!important}
  html.pfs-l main table :is(th,td){font-size:10pt!important;padding:4px 6px!important;line-height:1.35!important}
  html.pfs-m main table :is(th,td){font-size:9pt!important;padding:3px 5px!important;line-height:1.35!important}
  html.pfs-s main table :is(th,td){font-size:8pt!important;padding:2px 4px!important;line-height:1.3!important}
  html.pfs-xs main table :is(th,td){font-size:7pt!important;padding:2px 3px!important;line-height:1.3!important}
  main table td.pnw{white-space:nowrap}
  .exp-ch{display:none!important}
  html:is(.pfs-s,.pfs-xs) main table :is(th,td) small{font-size:.92em!important}
}
/* R114 — every table: drag a heading's edge to widen or narrow its column (arrow keys too; double-click resets) */
th.rsz-host{position:relative}
.col-rsz{position:absolute;top:0;right:0;width:9px;height:100%;cursor:col-resize;z-index:3;touch-action:none;outline:none}
.col-rsz::after{content:"";position:absolute;top:20%;bottom:20%;right:3px;width:2px;border-radius:2px;background:var(--line);opacity:0;transition:opacity var(--t-fast)}
th:hover>.col-rsz::after,.col-rsz:focus-visible::after,.col-rsz.on::after{opacity:1;background:var(--brand-2)}
.col-rsz:focus-visible{box-shadow:inset 0 0 0 2px var(--brand-2)}
table.rsz-fixed{table-layout:fixed}
table.rsz-fixed :is(th,td){overflow:hidden;overflow-wrap:anywhere}
body.rsz-drag,body.rsz-drag *{cursor:col-resize!important;user-select:none}
@media screen{.pcol-off{opacity:.38}}
@media (max-width:760px){.col-rsz{display:none}}
/* R114 — the print dialog (paper, text size, columns) */
.pdlg-box{width:min(640px,100%);max-height:calc(100vh - 32px);overflow:auto}
.pdlg-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 14px;margin:0 0 12px}
.pdlg-grid label{display:block;font-size:var(--fs-md);font-weight:600;margin:0 0 4px}
.pdlg fieldset{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px 10px;margin:0 0 10px;min-width:0}
.pdlg legend{font-weight:700;font-size:var(--fs-ui);padding:0 4px}
.pdlg-quick{display:flex;gap:6px;margin:0 0 8px}
.pdlg-cols{display:flex;flex-wrap:wrap;gap:6px 16px}
.pdlg-cols label{display:inline-flex;align-items:center;gap:6px;font-weight:400;margin:0;font-size:var(--fs-ui)}
.pdlg-cols input{width:auto;margin:0}
.pdlg-note{font-size:var(--fs-sm);color:var(--ink-3);margin:0 0 10px}
.pdlg-acts{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;margin-top:8px}
@media(max-width:560px){.pdlg-grid{grid-template-columns:minmax(0,1fr)}}

/* ================= R116 — phones first (docs/MOBILE-AUDIT.md) ================= */
.bnav,.nav-me,.mb-sum{display:none}
.gm-tree>summary{list-style:none}
.gm-tree>summary::-webkit-details-marker{display:none}
.gm-tree>summary h2{display:inline-flex;align-items:center;gap:6px;margin:0}
@media (min-width:901px){.gm-tree>summary{pointer-events:none}.gm-chev{display:none}}
.gm-chev{display:inline-flex;color:var(--ink-3);transition:transform var(--t-fast)}
.gm-tree[open]>summary .gm-chev{transform:rotate(180deg)}
/* the bottom bar; profile and logout move into the menu */
@media (max-width:760px){
  .bnav{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:60;gap:2px;background:var(--surface);border-top:1px solid var(--line);
    box-shadow:var(--shadow-2);padding:4px 6px calc(4px + env(safe-area-inset-bottom))}
  .bnav>a,.bnav>button{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-height:54px;padding:4px 2px;
    border:0;border-radius:var(--r-md);background:transparent;color:var(--ink-3);font:inherit;font-size:var(--fs-sm);font-weight:600;line-height:1.25;text-decoration:none;cursor:pointer;white-space:nowrap}
  .bnav>a span,.bnav>button span{max-width:100%;overflow:hidden;text-overflow:ellipsis}
  .bnav>a.on{color:var(--brand);background:var(--brand-ink)}
  .bnav>button[aria-expanded="true"]{color:var(--brand)}
  body{padding-bottom:calc(68px + env(safe-area-inset-bottom))}
  nav#mainnav.open .nav-me{display:flex;flex-direction:column;border-top:1px solid var(--line);margin-top:6px;padding-top:4px}
  .nav-me a{display:flex;align-items:center;gap:10px;padding:13px 10px;min-height:44px;color:var(--ink-2);font-weight:600;text-decoration:none}
  .userbox a.logout{display:none}
}
/* the working-context bar: one line that scrolls sideways */
@media (max-width:720px){
  .ctxform{flex-wrap:nowrap;overflow-x:auto;padding:6px 12px;gap:8px;scrollbar-width:none}
  .ctxform::-webkit-scrollbar{display:none}
  .ctx-t{width:auto;flex:none;font-size:0;gap:0}
  .ctx-f{flex:0 0 auto}
  .ctx-f>span{display:none}
  .ctx-f select{flex:none;width:auto;max-width:230px;min-height:38px!important;height:38px;padding:4px 28px 4px 10px}
  .ctx-f.ro b{white-space:nowrap;font-size:var(--fs-md)}
  .ctxbar.locked .chip{flex:none;font-size:0;gap:0;padding:4px 6px}
  .ctx-manage{flex:none;width:40px;height:40px;margin-left:0}
}
@media (max-width:640px){
  /* page title, actions and tabs */
  .toolbar{margin-bottom:14px;gap:10px}
  .toolbar>div:first-child{flex:1 1 100%}
  .toolbar p.muted{font-size:var(--fs-md);margin:4px 0 0}
  .toolbar>div:last-child:not(:first-child){flex:1 1 100%;flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start;padding:2px 0 6px;scrollbar-width:thin}
  .toolbar>div:last-child:not(:first-child)>*{flex:none;white-space:nowrap}
  .tabs,.settabs{flex-wrap:nowrap;overflow-x:auto;margin-bottom:14px;scrollbar-width:none}
  .tabs::-webkit-scrollbar,.settabs::-webkit-scrollbar{display:none}
  .tabs>*,.settabs>*{flex:none;white-space:nowrap}
  /* filters fold behind "ফিল্টার (n)" (dems.js) */
  .fb-toggle{margin:0 0 10px}
  .fb-toggle[aria-expanded="true"]{background:var(--brand-ink);border-color:var(--brand-2)}
  /* sticky action bars: one line until opened, out of the way while nothing is ticked */
  .hh-mergebar.mb-min{bottom:calc(70px + env(safe-area-inset-bottom));padding:8px 10px}
  .hh-mergebar.mb-min:not(.mb-open)>:not(.mb-sum){display:none}
  .hh-mergebar.mb-min.mb-none:not(.mb-open){display:none}
  .hh-mergebar.mb-min .mb-sum{display:flex;width:100%;margin:0 0 6px}
  .hh-mergebar.mb-min:not(.mb-open) .mb-sum{margin:0}
  /* R147: opened on a phone, the bar scrolls inside itself instead of covering the page */
  .hh-mergebar.mb-min.mb-open{max-height:min(60vh,440px);overflow:auto;padding:8px 10px}
  .hh-mergebar.mb-min.mb-open .formgrid{gap:6px}
  .bulkbar:not(.active){position:static}
  .bulkbar.active{position:fixed;left:8px;right:8px;top:auto;bottom:calc(70px + env(safe-area-inset-bottom));z-index:55}
  .density-btn{display:none!important}
}
/* compact cards: the name as the title, a two-column grid of small labels over values,
   long values full-width, empty ones left out, actions at the bottom, the tick in the corner */
@media screen and (max-width:640px){
  .table.stack tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 14px;padding:10px 14px 12px;position:relative}
  .table.stack td{display:block;padding:5px 0;border:0;min-width:0;overflow-wrap:anywhere}
  .table.stack td::before{display:block;font-size:var(--fs-xs);font-weight:600;line-height:1.35;margin-bottom:1px}
  .table.stack td.st-title{grid-column:1/-1;order:-2;font-size:var(--fs-lg);font-weight:700;padding:2px 36px 7px 0;border-bottom:1px solid var(--line-soft);margin-bottom:4px}
  .table.stack td.st-title::before{content:none}
  .table.stack td.st-title a{display:inline-block;padding:4px 0;min-height:36px}
  .table.stack td.st-title .sub{display:block;font-size:var(--fs-md);font-weight:500;color:var(--ink-3)}
  .table.stack td.st-pick{position:absolute;top:10px;right:12px;padding:0}
  .table.stack td.st-pick::before{content:none}
  .table.stack td.st-wide,.table.stack td.nolabel{grid-column:1/-1}
  .table.stack td.st-empty{display:none}
  .table.stack td.st-acts{grid-column:1/-1;border-top:1px solid var(--line-soft);padding-top:8px;margin-top:4px}
  .table.stack td.st-acts:not(:has(select))::before{content:none}
  .table.stack td .markform{display:flex;gap:8px;align-items:center}
  .table.stack td .markform select{flex:1;min-width:0;width:auto}
  .table.stack td .markform .btn{flex:none}
  .table.stack tr.expand-row{display:block}
  .table.stack tr.total{display:grid}
  .table.stack .fam-name{padding-left:0!important}
  .table.stack tr.fam-d1{border-left:4px solid var(--brand-2)}
  .table.stack tr:is(.fam-d2,.fam-d3){border-left:4px solid var(--brand)}
}
/* touch: 40-44px targets, 22px ticks, 16px fields (no zoom on focus), nothing under 12px */
@media (max-width:700px),(pointer:coarse){
  input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select,textarea{font-size:16px!important}
  input[type=checkbox],input[type=radio]{width:24px!important;height:24px!important;min-height:0}
  .markform .btn,.dense .table .btn.sm{min-height:44px}
  a.chip,.qa,.exp-toggle,.gt-go,.ctx-manage{min-height:40px;display:inline-flex;align-items:center}
  .gt-go{min-width:40px;justify-content:center}
  .cal-add{min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center}
  .gm-tree summary,.gm-tree summary a,.gm-tree li>a,.gm-all{display:inline-block;padding:8px 0}
  .dash a.dc-more{min-height:40px;min-width:40px;display:inline-flex;align-items:center;justify-content:center}
  .table a.elink{display:inline-block;padding:6px 0}
  small{font-size:max(12px,.85em)}
}

/* ================= R117 — dashboard on phones; people ↔ voters ================= */
.hb-short{display:none}
@media (max-width:720px){
  .dash .wdrag{display:none}   /* the order is set in ড্যাশবোর্ড সেটিংস; the handle sat on the widget titles */
  .dash .hero-tools{flex-wrap:nowrap;width:100%;gap:6px}
  .dash .hero-tools>*{min-width:0}
  .dash .hero-tools>.hero-btn:not(.icon),.dash .hero-tools>.hero-area{flex:1 1 0;justify-content:center}
  .dash .hero-tools .hero-btn{padding:0 10px;overflow:hidden}
  .dash .hero-tools .hero-area select{min-width:0;width:100%}
  .dash .hero-tools .hero-btn.icon{flex:none}
  .dash .hb-full{display:none}
  .dash .hb-short{display:inline}
  /* the countdown: centred, the number large */
  .dash .hero-count{width:100%;flex-direction:column;align-items:center;text-align:center;gap:4px;padding:14px 16px}
  .dash .hero-count .hc-name{max-width:100%;text-align:center}
  .dash .hero-count .hc-main{justify-content:center;gap:10px}
  .dash .hero-count .hc-main b{font-size:52px}
  .dash .hero-count .hc-unit{font-size:var(--fs-lg);text-align:left}
  .dash .hero-count.unset{align-items:center;text-align:center}
}
/* ব্যক্তিবর্গ: the columns chosen for a computer / a phone (printing uses the computer's) */
@media screen and (min-width:641px){.table .pc-nd{display:none!important}}
@media screen and (max-width:640px){.table .pc-nm{display:none!important}}
@media print{.table .pc-nd{display:none!important}}
.pl-tools{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin:0 0 10px}
.pl-tools .colpick{margin:0}
.pl-voters{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0}
.table tr.pl-voter td{background:var(--bg)}
/* the voter page */
.vp-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.vp-rel{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:6px 0}
.vp-rel>.muted:first-child{min-width:78px}
.vp-search{display:flex;gap:8px;margin:8px 0}
.vp-search input{flex:1;min-width:0}
.vp-cand{margin:6px 0 0}
.vp-cand li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--line-soft)}
.vp-cand form{margin:0}
.vp-h3{font-size:var(--fs-ui);margin:16px 0 4px}
@media (max-width:760px){.vp-cols{grid-template-columns:minmax(0,1fr)}}
/* R182: জরিপ ও অনুমান as a dashboard -- headline band, sub-tabs, ward table with mini bars; cards on phones */
.sp-head{border-top:4px solid var(--brand)}
.sp-head-top{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s-3);flex-wrap:wrap;margin-bottom:var(--s-3)}
.sp-head-top h2{margin:0 0 4px}
.sp-head-top p{margin:0}
.sp-head-act{display:flex;gap:6px;flex-wrap:wrap}
.sp-kpis{margin-bottom:var(--s-4)}
.sp-kpis .kpi .v small{font-size:var(--fs-md);color:var(--ink-3);font-weight:600}
.sp-kpis .kpi.ours{border-color:var(--ok);background:var(--ok-bg)}
.sp-kpis .kpi.lead .v{color:var(--ok)}
.sp-kpis .kpi.trail .v{color:var(--bad)}
.sp-proj{display:flex;flex-direction:column;gap:6px}
.sp-proj-n{min-width:7em;text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
.tabs.sub{margin:0 0 var(--s-4);padding-bottom:6px;scroll-margin-top:64px}
.tabs.sub .tab{font-size:var(--fs-ui);padding:6px 10px}
.sp-cols{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:var(--s-4);align-items:start}
.sp-missing{margin:0;padding:0 0 0 1.1em;display:flex;flex-direction:column;gap:4px}
.sp-wards th a{color:inherit;text-decoration:none}
.sp-wards th a.cur{color:var(--brand);text-decoration:underline}
.sp-wards tr.sp-none td{color:var(--ink-3)}
.sp-mini{display:block;height:5px;background:var(--surface-2);border-radius:3px;margin-bottom:3px;overflow:hidden}
.sp-mini i{display:block;height:100%;background:var(--ink-3);border-radius:3px}
.sp-mini.ours i{background:var(--ok)}
.sp-up{color:var(--ok);font-weight:700}
.sp-down{color:var(--bad);font-weight:700}
@media (max-width:760px){.sp-cols{grid-template-columns:minmax(0,1fr)}}
/* R182: সমর্থন ও জরিপ on phones -- compact cards: less padding, smaller titles, two-up KPIs, tighter rows and tables (screen only: print keeps real tables) */
@media screen and (max-width:640px){
  .sp-page .card{padding:12px 12px;margin-bottom:10px}
  .sp-page .card>h2,.sp-page .sp-bulk>summary h2{font-size:var(--fs-lg);margin:0 0 8px}
  .sp-page .card>p.muted,.sp-page .card>p>small{font-size:var(--fs-sm);line-height:1.45}
  .sp-page .toolbar h1{font-size:var(--fs-xl)}
  .sp-page .toolbar p.muted{font-size:var(--fs-sm)}
  .sp-page .sp-head{padding:12px}
  .sp-page .sp-head-top{gap:8px;margin-bottom:8px}
  .sp-page .sp-head-top h2{font-size:var(--fs-lg)}
  .sp-page .sp-head-act{width:100%}
  .sp-page .sp-head-act .btn{flex:1 1 0;justify-content:center;padding:8px 6px;font-size:var(--fs-sm)}
  .sp-page .kpis.kband.sp-kpis:has(.kpi){grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-bottom:10px}
  .sp-page .sp-kpis .kpi{padding:8px 10px;border-radius:var(--r-md)}
  .sp-page .sp-kpis .kpi .v{font-size:var(--fs-xl)}
  .sp-page .sp-kpis .kpi .k{font-size:var(--fs-xs);line-height:1.3}
  .sp-page .sp-kpis .kpi .k .chip{padding:0 6px;font-size:var(--fs-xs)}
  .sp-page .sp-proj{gap:4px}
  .sp-page .sp-proj-row{grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;font-size:var(--fs-md)}
  .sp-page .sp-proj-row b{font-weight:600}
  .sp-page .sp-proj-bar{height:7px}
  .sp-page .sp-proj-n{min-width:0;font-size:var(--fs-md)}
  .sp-page .tabs.sub{margin:0 -12px 10px;padding:0 12px 6px}
  .sp-page .tabs.sub .tab{padding:5px 9px;font-size:var(--fs-sm)}
  .sp-page .sp-cols{gap:10px}
  .sp-page .sp-missing{gap:2px;font-size:var(--fs-md)}
  .sp-page .table.compact th,.sp-page .table.compact td{padding:5px 7px;font-size:var(--fs-sm)}
  .sp-page .table.compact td .chip,.sp-page .table.compact td .btn.sm{font-size:var(--fs-xs);padding:1px 7px}
  .sp-page .table.compact td .btn.sm{padding:3px 8px;min-height:0}
  .sp-page .sp-bar{height:8px}
  .sp-page .sp-legend{gap:4px 10px;font-size:var(--fs-xs);margin-top:6px}
  .sp-page .tablewrap{margin-bottom:8px}
  /* every table of the section as compact cards: the generic .stack rules give the grid and the labels; here the cards are tighter,
     the cells sit three or two across, the title row is one line, and the action buttons are small and inline */
  .sp-page .table.stack tr{gap:0 10px;padding:8px 10px;margin:0 0 6px;border-radius:var(--r-md);box-shadow:none}
  .sp-page .table.stack td{padding:3px 0;font-size:var(--fs-sm);line-height:1.35}
  .sp-page .table.stack td::before{font-size:10px;line-height:1.2;margin:0;color:var(--ink-3)}
  .sp-page .table.stack td.st-title{font-size:var(--fs-md);padding:0 0 4px;margin-bottom:3px}
  .sp-page .table.stack td small{font-size:var(--fs-xs)}
  .sp-page .table.stack td .chip{font-size:var(--fs-xs);padding:1px 7px;margin:1px 2px 1px 0}
  .sp-page .table.stack td.st-acts{padding:5px 0 0;margin-top:3px;display:flex;flex-wrap:wrap;gap:6px}
  .sp-page .table.stack td.st-acts form{display:inline;margin:0}
  .sp-page .table.stack td.st-acts .btn.sm{padding:4px 10px;min-height:0;font-size:var(--fs-xs)}
  /* the total row: one line per figure, label left and number right */
  .sp-page .table.stack tr.sp-total{grid-template-columns:minmax(0,1fr);gap:0;background:var(--surface-2)}
  .sp-page .table.stack tr.sp-total td{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:3px 0;border-bottom:1px solid var(--line-soft)}
  .sp-page .table.stack tr.sp-total td:last-child{border-bottom:0}
  .sp-page .table.stack tr.sp-total td::before{font-size:var(--fs-sm);font-weight:600;margin:0}
  .sp-page .table.stack tr.sp-total td.st-title{display:block;font-size:var(--fs-md);padding:0 0 4px;border-bottom:1px solid var(--line)}
  .sp-page .table.stack tr.sp-total td.st-empty{display:none}
  /* ওয়ার্ড অনুযায়ী: ward on the title line, then three figures across */
  .sp-page .sp-wards.stack tr{grid-template-columns:repeat(3,minmax(0,1fr))}
  .sp-page .sp-wards.stack td.st-title{grid-column:1/-1}
  .sp-page .sp-wards.stack td br{display:none}
  .sp-page .sp-wards.stack td small{display:block}
  .sp-page .sp-mini{height:4px;margin-bottom:2px}
  /* সব অনুমান: date and ward on one line, who / source / confidence across, chips in a row, buttons last */
  .sp-page .sp-list.stack tr{grid-template-columns:repeat(3,minmax(0,1fr))}
  .sp-page .sp-list.stack td.st-title{grid-column:1/2;order:-2;font-size:var(--fs-xs);font-weight:600;color:var(--ink-3);border:0;padding:0;margin:0;align-self:end}
  .sp-page .sp-list.stack td:nth-child(2){grid-column:2/4;order:-2;font-weight:700;font-size:var(--fs-md);padding:0 0 4px;border-bottom:0}
  .sp-page .sp-list.stack td:nth-child(2)::before{content:none}
  .sp-page .sp-list.stack td:nth-child(7),.sp-page .sp-list.stack td:nth-child(8){grid-column:1/-1}
  .sp-page .sp-list.stack td:nth-child(7) .chip{display:inline-block}
  .sp-page .sp-list.stack td.st-acts{grid-column:1/-1}
  /* প্রার্থী: name, then ডাকনাম · দল · প্রতীক across */
  .sp-page .sp-cands.stack tr{grid-template-columns:repeat(3,minmax(0,1fr))}
  .sp-page .sp-cands.stack td.st-title{grid-column:1/-1}
  .sp-page .sp-cands.stack td.st-acts{grid-column:1/-1}
  /* সব ওয়ার্ড একসাথে: a ward per card, voters beside the name, the % fields three across with their own short labels */
  .sp-page .sp-bulk-t.stack tr{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px 8px}
  .sp-page .sp-bulk-t.stack td:first-child{grid-column:1/3;font-size:var(--fs-md);font-weight:700;padding:0 0 2px}
  .sp-page .sp-bulk-t.stack td:first-child::before{content:none}
  .sp-page .sp-bulk-t.stack td:nth-child(2){grid-column:3/4;text-align:right!important;padding:0 0 2px;font-size:var(--fs-sm);align-self:end}
  .sp-page .sp-bulk-t.stack td:nth-child(2)::before{content:none}
  .sp-page .sp-bulk-t.stack td.st-acts{display:block;grid-column:auto;border:0;margin:0;padding:2px 0}
  .sp-page .sp-bulk-t.stack td.st-acts::before{content:attr(data-l);display:block;font-size:10px;font-weight:600;color:var(--ink-3);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sp-page .sp-bulk-t.stack td.st-acts input{width:100%;min-height:36px;padding:4px 6px;font-size:var(--fs-ui)}
  .sp-page .sp-bulk-t .sp-cl{display:block;font-size:10px;font-weight:600;color:var(--ink-3);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sp-page .sp-bulk-t.stack td.st-acts::before{content:none}
  .sp-page .sp-bulk-t.stack td.st-acts .sp-live{font-size:10px;margin-top:1px}
  .sp-page .sp-mini{height:4px;margin-bottom:2px}
  .sp-page .formgrid{gap:8px 10px}
  .sp-page .formgrid label{font-size:var(--fs-sm)}
  .sp-page .sp-shares{padding:6px 10px;margin:8px 0}
  .sp-page .sp-shares legend{font-size:var(--fs-sm)}
  .sp-page .sp-live{font-size:var(--fs-xs);margin-top:2px}
  .sp-page .sp-bulk>summary{gap:4px 10px}
  .sp-page .sp-bulk>summary .muted{font-size:var(--fs-xs)}
  .sp-page .sp-bulk-t input{width:4.4em;padding:5px 6px;font-size:var(--fs-sm)}
  .sp-page .sp-mark{padding:8px;margin:8px 0}
  .sp-page .form-actions .muted{font-size:var(--fs-xs)}
}
/* R181: the all-wards estimate grid */
.sp-cl{display:none}   /* the per-cell label of the all-wards grid: phones only (the header row names the columns elsewhere) */
.sp-bulk>summary{list-style:none;cursor:pointer;display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s-2) var(--s-4)}
.sp-bulk>summary::-webkit-details-marker{display:none}
.sp-bulk>summary h2{margin:0}
.sp-bulk[open]>summary{margin-bottom:var(--s-4)}
.sp-bulk-t input{width:5.5em;text-align:right;padding:6px 8px}
.sp-bulk-t td{vertical-align:top}
.sp-bulk-t tr.bad td{background:var(--bad-bg)}
/* R180: the live numbers under the estimate form's % fields */
.sp-live{display:block;min-height:1.2em;margin-top:3px;font-size:var(--fs-sm)}
.sp-live:empty{display:none}
/* R179: the voter's numbers as a list with a সরান button each; the edit / add-number forms fold under a summary that looks like a button */
.vp-phones{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-direction:column;gap:4px}
.vp-phones li{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.vp-phones li>a{font-weight:600;color:var(--ink);text-decoration:none}
.vp-ph-rm{display:inline;margin:0}
.vp-edit,.vp-addph{margin-top:var(--s-3)}
.vp-edit>summary,.vp-addph>summary{display:inline-flex;list-style:none;cursor:pointer}
.vp-edit>summary::-webkit-details-marker,.vp-addph>summary::-webkit-details-marker{display:none}
.vp-edit[open]>summary,.vp-addph[open]>summary{margin-bottom:var(--s-3)}
.vp-edit-form,.vp-addph-form{border-top:1px solid var(--line);padding-top:var(--s-3)}
.vp-addph-form .formgrid{grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr))}

/* ================= R118 — voter list and lists on a computer ================= */
/* long filter forms fold on every screen (dems.js keeps the main and the set fields in view) */
form.fb-fold:not(.fb-open) .fb-opt{display:none}
.fb-toggle{white-space:nowrap}
@media (min-width:641px){form.fb-fold .formgrid>.fb-keep:has(.fb-toggle){display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap}.fb-toggle{margin:0}}
/* the list's own controls on one line */
.list-tools{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;margin:0 0 10px}
.list-tools .colpick,.list-tools .density-btn,.pl-tools .density-btn{margin:0}
/* a table with widths set by the viewer still fills its box */
table.rsz-fixed{min-width:100%}
/* the voter list fits a laptop: names and address wrap within set widths */
@media screen and (min-width:641px){
  .voterlist.two td.c-full_name_bn,.voterlist.two td.c-father_name_bn{white-space:normal;min-width:110px;max-width:180px}
  .voterlist.two td.c-address_bn{min-width:160px;max-width:220px}
  .voterlist .markform select{width:auto;min-width:0;max-width:150px;padding-right:24px}
  .voterlist .markform .btn{padding:4px 8px}
}
@media screen and (min-width:641px){
  .voterlist td.c-mobile{white-space:normal;max-width:120px}
  .voterlist.two td.c-voter_area_code{white-space:normal;max-width:130px}
}
@media screen and (min-width:641px) and (max-width:1280px){
  table.table.voterlist th,table.table.voterlist td{padding:7px 5px;font-size:var(--fs-sm)}
  .voterlist.two .sub{font-size:var(--fs-xs)}
  .voterlist.two td.c-full_name_bn,.voterlist.two td.c-father_name_bn{min-width:96px}
  .voterlist.two td.c-address_bn{min-width:135px;max-width:180px}
  .voterlist td.c-mobile{max-width:96px}
  .voterlist .markform .btn{display:none}   /* the status saves on change (data-autosubmit) */
  .voterlist .markform select{max-width:112px;font-size:var(--fs-sm)!important}
}
/* R119 — the archive's bulk delete */
.purge-all>summary{cursor:pointer;display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.purge-all[open]>summary{margin-bottom:10px}
/* R122 — a part of a page that loads when opened */
details.lazy{margin-top:10px}
details.lazy>summary{list-style:none;display:inline-flex}
details.lazy>summary::-webkit-details-marker{display:none}
details.lazy .lazy-body{margin-top:8px}
/* R124 — a form's parts for the chosen kind (dems.js data-switch) */
.sw-off{display:none!important}
.cp-form{margin-top:12px;padding-top:12px;border-top:1px solid var(--line-soft)}
/* R125/R126 — ব্যবহার নির্দেশিকা (manual.php): side contents + search, cover, chapter cards, step cards */
.man-wrap{display:grid;grid-template-columns:minmax(0,1fr);gap:22px;align-items:start}
@media (min-width:1100px){.man-wrap{grid-template-columns:270px minmax(0,1fr)}}
.man-side{position:sticky;top:calc(var(--navh, 0px) + 12px);max-height:calc(100vh - var(--navh, 0px) - 24px);display:flex;flex-direction:column;gap:10px;min-width:0}
.man-search{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:4px 6px 4px 14px;color:var(--ink-3);box-shadow:var(--shadow)}
.man-search:focus-within{border-color:var(--brand);color:var(--brand)}
.man-search input{border:0;background:transparent;padding:8px 4px;min-width:0;flex:1;box-shadow:none;outline:0}
.man-found{margin:0 6px;font-size:var(--fs-md);color:var(--ink-2)}
.man-nav{overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 8px}
.man-nav ol{list-style:none;margin:0;padding:0}
.man-nav>ol>li>a{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:var(--r);font-weight:700;font-size:var(--fs-ui);color:var(--ink);text-decoration:none}
.man-nav>ol>li>a .ic{color:var(--brand);flex:none}
.man-nav ol ol{padding:0 0 6px 33px}
.man-nav ol ol a{display:block;padding:3px 8px;font-size:var(--fs-md);line-height:1.5;color:var(--ink-2);text-decoration:none;border-radius:var(--r-sm)}
.man-nav a:hover{background:var(--line-soft);color:var(--brand)}
@media (max-width:1099px){.man-side{position:static;max-height:none}.man-nav{display:none}}
.man-doc{min-width:0;max-width:900px}
.man-doc.single{margin:0 auto}
/* cover */
.man-cover{position:relative;overflow:hidden;background:var(--brand);color:var(--on-accent);border-radius:calc(var(--r-lg) + 4px);padding:28px 28px 24px;margin-bottom:20px}
.man-cover::after{content:"";position:absolute;right:-60px;top:-60px;width:240px;height:240px;border-radius:50%;background:rgb(var(--on-accent-rgb) / .08)}
.man-cover::before{content:"";position:absolute;right:60px;bottom:-90px;width:180px;height:180px;border-radius:50%;background:rgb(var(--on-accent-rgb) / .06)}
.man-kind{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-md);font-weight:700;padding:4px 12px;border-radius:var(--r-pill);background:rgb(var(--on-accent-rgb) / .16)}
.man-title{position:relative;z-index:1;font-size:var(--fs-d);font-weight:800;line-height:1.3;margin:12px 0 4px}
.man-for{position:relative;z-index:1;margin:0 0 12px;font-size:var(--fs-lg);opacity:.92}
.man-meta{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:8px;margin:0}
.man-meta span{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);padding:3px 11px;border-radius:var(--r-pill);background:rgb(var(--on-accent-rgb) / .14)}
/* overview cards */
.man-overview{margin-bottom:26px}
.man-overview h2{font-size:var(--fs-xl);margin:0 0 12px}
.man-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.man-card{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:12px;row-gap:2px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px;text-decoration:none;color:var(--ink);box-shadow:var(--shadow);transition:border-color var(--t-fast),transform var(--t-fast)}
.man-card:hover{border-color:var(--brand);transform:translateY(-1px)}
.man-card .man-ch-ic{grid-row:1 / 3}
.man-card b{font-size:var(--fs-base);line-height:1.4}
.man-card small{color:var(--ink-3);font-size:var(--fs-sm);line-height:1.5}
.man-chno{display:inline-grid;place-items:center;min-width:22px;height:22px;border-radius:var(--r-sm);background:var(--line-soft);color:var(--brand);font-size:var(--fs-sm);margin-right:2px}
.man-ch-ic{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:var(--r-md);background:var(--brand-ink);color:var(--brand);flex:none}
.man-card.news .man-ch-ic{background:var(--warn-bg);color:var(--warn)}
.man-card.howto .man-ch-ic{background:var(--ok-bg);color:var(--ok)}
/* chapters */
.man-chapter{margin:0 0 30px}
.man-ch-h{display:flex;align-items:center;gap:14px;padding:14px 16px;margin:0 0 14px;border-radius:var(--r-lg);background:var(--brand-ink);border-left:5px solid var(--brand);scroll-margin-top:calc(var(--navh, 0px) + 12px)}
.man-ch-h .man-ch-ic{background:var(--surface);width:50px;height:50px}
.man-kicker{display:block;font-size:var(--fs-sm);font-weight:700;color:var(--brand);letter-spacing:.3px}
.man-ch-h h2{margin:0;font-size:var(--fs-2xl);line-height:1.35;color:var(--ink)}
.man-ch-sub{font-size:var(--fs-md);color:var(--ink-2)}
/* a section */
.man-sec{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 20px;margin:0 0 14px;box-shadow:var(--shadow);scroll-margin-top:calc(var(--navh, 0px) + 12px)}
.man-sec-h{display:flex;gap:12px;align-items:flex-start;margin-bottom:8px}
.man-ic{display:inline-grid;place-items:center;width:38px;height:38px;border-radius:var(--r);background:var(--brand-ink);color:var(--brand);flex:none;margin-top:2px}
.man-sec.howto .man-ic{background:var(--ok-bg);color:var(--ok)}
.man-sec h3{font-size:18.5px;margin:0 0 4px;line-height:1.4}
.man-crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin:0;font-size:var(--fs-sm);color:var(--ink-2)}
.man-crumbs-k{display:inline-flex;align-items:center;gap:4px;font-weight:700;color:var(--brand);margin-right:4px}
.man-crumb{background:var(--line-soft);border-radius:var(--r-sm);padding:1px 8px}
.man-sep{display:inline-flex;color:var(--ink-3)}
.man-also{margin-left:6px;color:var(--ink-3)}
.man-also::before{content:"· "}
.man-intro{margin:6px 0 10px;font-size:var(--fs-base);color:var(--ink)}
.man-steps h4{display:flex;align-items:center;gap:8px;font-size:var(--fs-base);margin:14px 0 6px;color:var(--ink)}
.man-steps h4::before{content:"";width:4px;height:18px;border-radius:2px;background:var(--brand)}
.man-ol{list-style:none;counter-reset:st;margin:0;padding:0}
.man-ol>li{counter-increment:st;position:relative;padding:4px 0 6px 40px;min-height:30px}
.man-ol>li::before{content:counter(st, bengali);position:absolute;left:0;top:3px;width:27px;height:27px;border-radius:50%;background:var(--brand);color:var(--on-accent);display:grid;place-items:center;font-size:var(--fs-md);font-weight:700}
.man-ol>li:not(:last-child)::after{content:"";position:absolute;left:13px;top:32px;bottom:-4px;width:1px;background:var(--line)}
b.ui{color:var(--brand);font-weight:700;background:var(--brand-ink);padding:0 5px;border-radius:5px;box-decoration-break:clone;-webkit-box-decoration-break:clone}
b.ext{font-weight:700;border-bottom:1px dashed var(--ink-3)}
.man-link{font-weight:600}
.man-devs{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:12px 0 4px}
.man-dev,.man-tip{border-radius:var(--r);padding:10px 14px}
.man-dev{background:var(--bg);border:1px solid var(--line-soft)}
.man-dev>b,.man-tip>b{display:flex;align-items:center;gap:7px;font-size:var(--fs-ui);margin-bottom:2px}
.man-dev.mob>b{color:var(--brand)}
.man-tip{background:var(--warn-bg);border-left:4px solid var(--warn);margin:12px 0 4px}
.man-tip>b{color:var(--warn)}
.man-dev ul,.man-tip ul{margin:4px 0 0;padding-left:20px}
.man-dev li,.man-tip li{margin:3px 0}
.man-rel{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:14px;padding-top:12px;border-top:1px dashed var(--line)}
.man-rel-k{font-size:var(--fs-md);font-weight:700;color:var(--ink-3);margin-right:2px}
.man-chip{font-size:var(--fs-md);padding:3px 11px;border-radius:var(--r-pill);border:1px solid var(--line);text-decoration:none;color:var(--ink-2);background:var(--surface)}
.man-chip:hover{border-color:var(--brand);color:var(--brand)}
.man-open{margin-left:auto}
/* নতুন কী */
.man-news{list-style:none;margin:0;padding:0}
.man-news>li.man-sec{padding:12px 16px;margin-bottom:10px;border-left:4px solid var(--warn)}
.man-news-d{display:block;font-size:var(--fs-sm);font-weight:700;color:var(--warn);margin-bottom:2px}
.man-none{text-align:center;color:var(--ink-2);padding:30px 0}
.man-foot{text-align:center;color:var(--ink-3);font-size:var(--fs-sm);margin:18px 0 6px}
/* the generator form */
.man-mods{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;margin:10px 0}
.man-mods legend{font-weight:700;font-size:var(--fs-ui);padding:0 4px}
.man-mods label.inline{display:inline-flex;align-items:center;gap:5px;margin:3px 12px 3px 0}
@media (max-width:640px){
  .man-cover{padding:20px 18px 18px;border-radius:var(--r-lg)}
  .man-title{font-size:var(--fs-2xl)}
  .man-sec{padding:14px 14px}
  .man-sec-h .man-ic{display:none}
  .man-ch-h{padding:12px}
  .man-ch-h h2{font-size:var(--fs-xl)}
  .man-ol>li{padding-left:36px}
  .man-cards{grid-template-columns:1fr}
}
@media print{
  .man-wrap{display:block}
  .man-doc{max-width:none}
  .man-cover,.man-ch-h,.man-ch-ic,.man-ic,.man-ol>li::before,b.ui,.man-tip,.man-dev,.man-crumb{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .man-cover{border-radius:0;margin:0 0 14px}
  .man-overview{break-after:page}
  .man-card{box-shadow:none;break-inside:avoid}
  .man-chapter{break-before:page;margin:0}
  .man-sec{box-shadow:none;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:10px 0;break-inside:auto}
  .man-sec h3,.man-steps h4,.man-ch-h{break-after:avoid}
  .man-ol>li,.man-dev,.man-tip{break-inside:avoid}
  .man-doc a{color:inherit;text-decoration:none}
  .man-open{display:none}
}
/* R128 — a গোষ্ঠী's page changes in place: the member's buttons, the "অন্য গোষ্ঠীতে যুক্ত" panel, the toast */
.hh-acts{text-align:right}
.hh-acts .btn{margin:2px 0;vertical-align:middle}
tr.hh-move-row>td{background:var(--bg);padding:10px 12px}
.hh-move .formgrid{margin-top:8px}
.hh-res{margin-top:6px}
.hh-res[aria-busy="true"]{opacity:.55}
.hh-sugg.hh-done{opacity:.6}
.hh-sugg.hh-done .btn{visibility:hidden}
.hh-toast{position:fixed;left:50%;transform:translateX(-50%);bottom:20px;z-index:60;max-width:min(560px,calc(100vw - 24px));
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;border-radius:var(--r-lg);
  background:var(--ink);color:var(--surface);box-shadow:var(--shadow-lg);font-size:var(--fs-ui);line-height:1.5}
.hh-toast.bad{background:var(--bad);color:var(--on-accent)}
.hh-toast[hidden]{display:none}
.hh-toast .btn{background:var(--surface);color:var(--ink);border-color:var(--surface)}
@media (max-width:640px){.hh-toast{bottom:calc(76px + env(safe-area-inset-bottom, 0px))}.hh-acts{text-align:left}}
/* R129 — a গোষ্ঠী's bulk bar (ticked members) and the "no relation found" hint
   (R154: the stray .hh-pick{width:34px} that squeezed the merge-search rows to one character per line is gone) */
.hh-norel{font-size:var(--fs-sm);font-style:italic}
.hh-bulk{position:sticky;bottom:12px;z-index:55;margin:10px 0;padding:10px 14px;border-radius:var(--r-lg);background:var(--surface);border:2px solid var(--brand);box-shadow:var(--shadow-lg)}
.hh-bulk[hidden]{display:none}
.hh-bulk-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.hh-bulk-n{font-weight:700;color:var(--brand);margin-right:4px}
.hh-bulk-split{display:inline-flex;gap:6px;align-items:center}
.hh-bulk-split input{width:190px;padding:6px 10px}
.hh-bulk-move{margin-top:10px}
.hh-bulk-move input{max-width:420px}
@media (max-width:640px){.hh-bulk{bottom:calc(72px + env(safe-area-inset-bottom, 0px))}.hh-bulk-split input{width:150px}}
/* R130 — সমর্থন বিশ্লেষণ: the stance bar, its legend, the projected votes */
.sp-kpis .kpi{text-decoration:none;color:inherit}
.sp-kpis .kpi.ok .v{color:var(--ok)}
.sp-kpis .kpi.warn .v{color:var(--warn)}
.sp-kpis .kpi.bad .v{color:var(--bad)}
.sp-bar{display:flex;height:14px;border-radius:var(--r-pill);overflow:hidden;background:var(--line-soft);gap:1px}
.sp-seg{display:block;height:100%;min-width:2px}
.sp-seg.ok,.sp-dot.ok{background:var(--ok)}
.sp-seg.warn,.sp-dot.warn{background:var(--c-amber-450)}
.sp-seg.bad,.sp-dot.bad{background:var(--bad)}
.sp-seg.oth,.sp-dot.oth{background:var(--c-violet-400)}
.sp-seg.none,.sp-dot.none{background:var(--ink-3)}
.sp-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:10px 0 0;font-size:var(--fs-md)}
.sp-legend span{display:inline-flex;align-items:center;gap:6px}
.sp-dot{display:inline-block;width:10px;height:10px;border-radius:var(--r-xs)}
.sp-table td .sp-bar{height:9px}
.sp-table tr.sp-total td{border-top:2px solid var(--line)}
.sp-proj{display:grid;gap:8px}
.sp-proj-row{display:grid;grid-template-columns:minmax(120px,1.2fr) 3fr auto;gap:10px;align-items:center}
.sp-proj-bar{height:12px;border-radius:var(--r-pill);background:var(--line-soft);overflow:hidden}
.sp-proj-bar i{display:block;height:100%;background:var(--ink-3)}
.sp-proj-row.ours .sp-proj-bar i{background:var(--ok)}
.sp-shares{border:1px solid var(--line);border-radius:var(--r);padding:8px 12px;margin:10px 0}
.sp-shares legend{font-weight:700;font-size:var(--fs-ui);padding:0 4px}
.sp-sum{margin:6px 0 0}
.sp-sum.bad{color:var(--bad);font-weight:700}
.sp-mark{margin:12px 0;padding:12px;border-radius:var(--r);background:var(--bg);border:1px solid var(--line-soft)}
@media (max-width:640px){.sp-proj-row{grid-template-columns:1fr auto}.sp-proj-bar{grid-column:1/-1;order:3}}
/* R131 — গোষ্ঠী: related links, the ticked-groups bar heading, the in-place stance select, the voter page's members */
.gs-links{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;margin:8px 0 12px;font-size:var(--fs-ui)}
.gs-links a{display:inline-flex;align-items:center;gap:5px}
.gs-bar-h{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 8px}
select.hh-mark{padding:4px 26px 4px 8px;font-size:var(--fs-md);max-width:170px}
.vt-members{font-size:var(--fs-ui);line-height:1.9}

/* R132 — পারিবারিক বৃক্ষ (family_tree.php): one row per generation, a card per person */
.ft-tree{display:flex;flex-direction:column;gap:10px;margin:12px 0}
.ft-gen{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:8px 10px}
.ft-gen-h{font-size:var(--fs-sm);font-weight:700;color:var(--ink);opacity:.7;margin-bottom:6px}
.ft-row{display:flex;flex-wrap:wrap;gap:8px}
.ft-node{display:flex;flex-direction:column;gap:2px;min-width:150px;max-width:230px;flex:1 1 150px;padding:8px 10px;border:1px solid var(--line);border-radius:var(--r);background:var(--bg)}
.ft-node.me{border:2px solid var(--brand)}
.ft-node.guess{border-style:dashed}
.ft-node .chip{align-self:flex-start;margin-top:2px}
.ft-kin{font-size:var(--fs-sm);font-weight:700;color:var(--brand)}
.ft-name{font-weight:600;color:var(--ink)}
.ft-meta{font-size:var(--fs-sm);opacity:.75}
.ft-note{font-size:var(--fs-md)}
.ft-sub{margin:14px 0 6px;font-size:var(--fs-base)}
.ft-add-row{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}
.ft-add-row select,.ft-add-row input{width:auto;min-width:0;max-width:100%}
.ft-scope{display:inline-block;margin:0 6px 6px 0}
.ft-res{margin-top:6px}
@media (max-width:560px){.ft-node{max-width:none;flex-basis:100%}}
@media print{.ft-gen{break-inside:avoid}.ft-node{background:none}}
.fam-tree{display:inline-flex;vertical-align:middle;opacity:.7}.fam-tree:hover{opacity:1}
/* R133 — family tree: নিশ্চিত করুন / বাতিল side by side; the turned-down list */
.ft-acts{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}
.ft-denied{margin-top:12px;border-top:1px solid var(--line-soft);padding-top:8px}
.ft-denied summary{cursor:pointer;font-weight:600}
.ft-denied ul{margin:6px 0 0;padding-left:18px}
.ft-denied li{margin:4px 0}

/* R134 — a গোষ্ঠী as a family tree (family_tree.php?key=): couples side by side, children below, lines between */
.ftv-trees{display:flex;flex-wrap:wrap;gap:20px 28px;justify-content:center;align-items:flex-start;margin:10px 0 6px}
.ftv-tree{max-width:100%;overflow-x:auto;padding:4px 2px 10px}
.ftv,.ftv ul{list-style:none;margin:0;padding:0;display:flex;justify-content:center}
.ftv{width:max-content;margin:0 auto}
.ftv ul{position:relative;padding-top:18px}
.ftv ul::before{content:'';position:absolute;top:0;left:50%;height:18px;border-left:2px solid var(--line)}
.ftv li{position:relative;display:flex;flex-direction:column;align-items:center;padding:18px 5px 0}
.ftv li::before,.ftv li::after{content:'';position:absolute;top:0;right:50%;width:50%;height:18px;border-top:2px solid var(--line)}
.ftv li::after{right:auto;left:50%;border-left:2px solid var(--line)}
.ftv li:only-child{padding-top:0}
.ftv li:only-child::before,.ftv li:only-child::after{display:none}
.ftv li:first-child::before,.ftv li:last-child::after{border:0 none}
.ftv li:last-child::before{border-right:2px solid var(--line);border-radius:0 8px 0 0}
.ftv li:first-child::after{border-radius:8px 0 0 0}
.ftv>li{padding-top:0}
.ftv>li::before,.ftv>li::after{display:none}
.ftv-unit{display:inline-flex;align-items:center}
.ftv-card{display:flex;flex-direction:column;gap:2px;width:148px;padding:7px 9px;text-align:left;font-size:var(--fs-md);line-height:1.35;background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.ftv-card.m{border-top-color:var(--brand)}
.ftv-card.f{border-top-color:var(--kin-f)}
.ftv-card.guess{border-style:dashed}
.ftv-card.virtual{background:var(--bg);border-style:dashed;box-shadow:none}
.ftv-card .chip{align-self:flex-start;font-size:var(--fs-xs);padding:1px 7px}
.ftv-card:target{outline:2px solid var(--brand);outline-offset:2px}
.ftv-name{font-weight:700;color:var(--ink)}
.ftv-meta{font-size:var(--fs-xs);opacity:.75}
.ftv-knot{width:16px;border-top:2px solid var(--brand);align-self:center}
.ftv-knot.guess{border-top-style:dashed}
.ftv-ref{font-size:var(--fs-sm);padding:4px 8px;border:1px dashed var(--line);border-radius:var(--r)}
.ftv-legend{font-size:var(--fs-md)}
.ft-bulk{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0 0;padding:8px 10px;border:1px solid var(--line-soft);border-radius:var(--r);background:var(--bg)}
.ft-bulk-all{margin-left:auto}
@media (max-width:560px){.ftv-card{width:118px;font-size:var(--fs-sm);padding:6px 7px}.ftv li{padding-left:3px;padding-right:3px}.ft-bulk-all{margin-left:0}}
@media print{.ftv-tree{overflow:visible}.ftv-card{box-shadow:none}}
/* R135 — family tree: a small tick / cross wherever a guess is confirmed or turned down; each wife's children */
.ft-ics{display:inline-flex;gap:4px;align-items:center;margin:0}
.ftv-card .ft-ics{align-self:flex-end;margin-top:2px}
.ft-ic{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border-radius:50%;border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer}
.ft-ic.ok{background:var(--ok-bg);color:var(--ok);border-color:var(--ok)}
.ft-ic.no{background:var(--bad-bg);color:var(--bad);border-color:var(--bad)}
.ft-ic:hover,.ft-ic:focus-visible{filter:brightness(.95);outline:2px solid var(--brand);outline-offset:1px}
.ft-ic+.ft-ic{margin-left:4px}
.ftv-grp-l{font-size:var(--fs-sm);font-weight:600;padding:3px 10px;border:1px dashed var(--line);border-radius:var(--r-pill);background:var(--bg);white-space:nowrap}
/* R135: a ticked-items bar (গোষ্ঠী list, ম্যাপিং) is one small line, out of the way while nothing is ticked -- on every screen */
.hh-mergebar.mb-min:not(.mb-open)>:not(.mb-sum){display:none}
.hh-mergebar.mb-min.mb-none:not(.mb-open){display:none}
.hh-mergebar.mb-min .mb-sum{display:inline-flex;margin:0 0 6px}
.hh-mergebar.mb-min:not(.mb-open){width:max-content;max-width:100%;margin-left:auto;padding:6px 8px}
.hh-mergebar.mb-min:not(.mb-open) .mb-sum{margin:0}
/* R138 — "one father of the same name?" on a father's card */
.ftv-ask{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-top:4px;padding-top:4px;border-top:1px dashed var(--line);font-size:var(--fs-xs);color:var(--warn)}
/* R139 — tie an unlinked member into the গোষ্ঠী tree */
.ftv-alone{display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.ftv-alone:has(details[open]){flex-basis:100%}
.ftv-add>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:4px}
.ftv-add>summary::-webkit-details-marker{display:none}
.ftv-add-any{margin-top:12px}
.ft-gadd{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0 4px;padding:8px 10px;border:1px solid var(--line-soft);border-radius:var(--r);background:var(--bg)}
.ft-gadd select,.ft-gadd input{width:auto;min-width:0;max-width:100%}
/* R140 — relate a member to someone of another ward / voter area, found in place */
.ft-gfind{margin:6px 0 4px}
.ft-gfind .formgrid{margin:0}
.ft-found{flex-basis:100%}
.ftv-outrel{font-size:var(--fs-sm);max-width:260px;line-height:1.45}
/* R142 — the main menu on one row: tighter spacing, then "আরও" holding the right-most groups (dems.js navFit) */
#mainnav.nav-tight .navgroup>button,#mainnav.nav-tight>a.navlink{padding-left:7px;padding-right:7px;font-size:var(--fs-md);gap:3px}
#mainnav>.navmore>.navmenu{left:auto;right:0;min-width:250px;max-height:78vh;overflow-y:auto}
.navmore .navmenu .navgroup>button{width:100%;justify-content:space-between;padding:9px 11px;border-bottom:0;border-radius:var(--r-sm);font-size:var(--fs-ui)}
.navmore .navmenu .navgroup>button[aria-expanded="true"]{background:var(--brand-ink)}
.navmore .navmenu .navgroup>.navmenu{position:static;box-shadow:none;border:0;border-left:3px solid var(--brand-2);border-radius:0;margin:0 0 6px 10px;padding:2px 0 2px 6px;min-width:0;columns:auto}

/* R145 — skip link (keyboard users land on the menu every page), the Tick-E mark in the top bar */
.skip{position:absolute;left:-999px;top:8px;z-index:100;padding:8px 12px;border-radius:var(--r-sm);background:var(--surface);color:var(--brand);font-weight:700}
.skip:focus{left:8px;outline:2px solid var(--brand)}
.topbar .brand svg{width:22px;height:22px;flex:none;border-radius:var(--r-sm)}

/* ===================================================================== R148 — identity
   One header band: the brand bar and the menu share the teal; the section you are in carries a
   saffron underline (the tick of the mark). Phones keep their folded white menu. */
@media (min-width:701px){
  .topbar{background:var(--brand);box-shadow:none}
  #mainnav{background:var(--brand);border-bottom:0;box-shadow:0 2px 10px rgb(var(--shade-rgb) / .18)}
  #mainnav>a.navlink,.navgroup>button{color:rgb(var(--on-accent-rgb) / .84);border-bottom:3px solid transparent;border-radius:0}
  #mainnav>a.navlink:hover,.navgroup>button:hover{color:var(--on-accent);background:rgb(var(--on-accent-rgb) / .10)}
  .navgroup>button[aria-expanded="true"]{color:var(--on-accent);background:rgb(var(--on-accent-rgb) / .14);border-bottom-color:var(--accent)}
  #mainnav>a.navlink.cur,.navgroup.cur>button{color:var(--on-accent);border-bottom-color:var(--accent);font-weight:700}
  .navgroup>button .chev{opacity:.85}
  .ctxbar{background:var(--surface)}
  .ctxform{padding:5px 18px}
}
@media (max-width:700px){
  nav#mainnav.open>a.navlink.cur,nav#mainnav.open .navgroup.cur>button{color:var(--brand);box-shadow:inset 3px 0 0 var(--accent)}
}
.tab.active{box-shadow:inset 0 -3px 0 var(--accent)}
.card>h2,.dw-h h2{letter-spacing:-.1px}

/* R148 — the field worker's home: four daily tasks, the support picture of their own area */
.home-acts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 16px}
.home-act{display:flex;flex-direction:column;gap:8px;min-height:108px;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  text-decoration:none;color:var(--ink);box-shadow:var(--shadow);transition:transform var(--t-fast),border-color var(--t-fast)}
.home-act:hover{transform:translateY(-2px);border-color:var(--brand-2);color:var(--ink)}
.home-act .ha-i{width:40px;height:40px;border-radius:var(--r-md);display:grid;place-items:center;background:var(--brand-ink);color:var(--brand)}
.home-act.accent .ha-i{background:var(--accent-bg);color:var(--accent-ink)}
.home-act b{font-size:var(--fs-lg);font-weight:700;line-height:1.3}
.home-act span{font-size:var(--fs-md);color:var(--ink-3)}
.home-sup{margin:0 0 16px}
.home-sup .hs-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.home-sup .hs-head h2{margin:0;font-size:var(--fs-lg)}
.home-sup .hs-head span{font-size:var(--fs-md);color:var(--ink-3)}
.sbar{display:flex;height:18px;border-radius:var(--r);overflow:hidden;background:var(--line-soft)}
.sbar i{display:block;height:100%}
.sbar .s-ok{background:var(--ok)}.sbar .s-warn{background:var(--accent)}.sbar .s-bad{background:var(--bad)}
.home-legend{display:flex;gap:18px;flex-wrap:wrap;margin:10px 0 0;font-size:var(--fs-ui);color:var(--ink-3)}
.home-legend b{font-variant-numeric:tabular-nums}
.home-legend .t-ok{color:var(--ok)}.home-legend .t-warn{color:var(--accent-ink)}.home-legend .t-bad{color:var(--bad)}.home-legend .t-ink{color:var(--ink)}
@media (max-width:760px){.home-acts{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.home-act{min-height:96px;padding:14px}.home-act b{font-size:var(--fs-lg)}}

/* R148 — one-tap stance: three large buttons (the select stays for the other statuses) */
.stance3{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.stance3 button{flex:1 1 0;min-height:44px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;font-size:var(--fs-ui);font-weight:600;padding:0 6px;width:auto;cursor:pointer}
.stance3 button:hover{border-color:var(--brand-2);background:var(--brand-ink)}
.stance3 button.on{border:2px solid var(--brand);background:var(--brand-ink);color:var(--brand);font-weight:700}
.stance3 button.s-ok.on{border-color:var(--ok);background:var(--ok-bg);color:var(--ok)}
.stance3 button.s-warn.on{border-color:var(--accent-ink);background:var(--accent-bg);color:var(--accent-ink)}
.stance3 button.s-bad.on{border-color:var(--bad);background:var(--bad-bg);color:var(--bad)}
.stance3 select.more{order:9;flex:0 0 auto;width:auto;max-width:150px;min-height:44px;font-size:var(--fs-md)}
.markform .stance3{display:none}
@media screen and (max-width:640px){
  .markform .mark-sel{display:none}
  .markform .stance3{display:flex}
  .markform .stance3 button{font-size:var(--fs-md);padding:0 4px}
  .table.stack td:has(> .markform){padding-top:8px}
}
.vp-stance .vs-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.vp-stance .vs-head h2{margin:0}
.vp-stance .vs-last{margin-left:auto;font-size:var(--fs-md);color:var(--ink-3)}
.vp-stance .stance3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.vp-stance .stance3 button{min-height:48px;font-size:var(--fs-base)}
.vp-stance .stance-more{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.vp-stance .stance-more button{flex:1 1 140px;min-height:40px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;font-size:var(--fs-ui);width:auto;cursor:pointer}
.vp-stance .stance-more button:hover{border-color:var(--brand-2);background:var(--brand-ink)}
.vp-stance .stance-more button.on{border:2px solid var(--brand);background:var(--brand-ink);color:var(--brand);font-weight:700}
.vp-stance .vs-note{display:flex;gap:8px;margin-top:10px}
.vp-stance .vs-note input{flex:1;min-width:0}
.vs-log{list-style:none;margin:12px 0 0;padding:10px 0 0;border-top:1px dashed var(--line);display:flex;flex-direction:column;gap:5px;font-size:var(--fs-ui)}
.vs-log .d{display:inline-block;min-width:110px;color:var(--ink-3)}
.vs-log .w{color:var(--ink-3)}

/* ===================================================================== R149 — polling-day board */
.pdb{--pb-bg:var(--c-teal-900-2);--pb-card:var(--c-teal-800-5);--pb-line:var(--c-cyan-850);--pb-ink:var(--c-mist-50-15);--pb-ink2:var(--c-teal-150-6);
  background:var(--pb-bg);color:var(--pb-ink);border-radius:var(--r-xl);padding:18px 20px 20px;margin:-6px 0 20px}
.pdb-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px 20px;flex-wrap:wrap;margin-bottom:14px}
.pdb-head h1{margin:0;font-size:var(--fs-2xl);color:var(--on-accent);display:flex;align-items:center;gap:8px}
.pdb-head p{margin:4px 0 0;font-size:var(--fs-md);color:var(--pb-ink2)}
.pdb-live{color:var(--c-green-550);font-weight:700}
.pdb-note{color:var(--c-amber-300-2)}
.pdb-tools{display:flex;gap:8px;flex-wrap:wrap}
.pdb .btn.secondary{background:rgb(var(--on-accent-rgb) / .10);border-color:rgb(var(--on-accent-rgb) / .25);color:var(--on-accent)}
.pdb .btn.pdb-acc{background:var(--accent);color:var(--c-orange-900);font-weight:700}
.pdb .btn.pdb-wide{display:flex;justify-content:center;margin-top:10px}
.pdb .alert{margin:0 0 12px}
.pdb-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
.pdb-kpi{background:var(--pb-card);border:1px solid var(--pb-line);border-radius:var(--r-lg);padding:14px 16px;display:flex;flex-direction:column;gap:2px;min-width:0}
.pdb-kpi span{font-size:var(--fs-md);color:var(--pb-ink2)}
.pdb-kpi b{font-size:var(--fs-d);line-height:1.15;color:var(--on-accent);font-variant-numeric:tabular-nums;letter-spacing:-.4px}
.pdb-kpi small{font-size:var(--fs-md);color:var(--pb-ink2)}
.pdb-kpi.warn b{color:var(--c-amber-300-2)}
.pdb-kpi.bad b{color:var(--c-red-150)}
.pdb-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:12px;align-items:start}
.pdb-card{background:var(--pb-card);border:1px solid var(--pb-line);border-radius:var(--r-lg);padding:14px 16px;min-width:0}
.pdb-card+.pdb-card{margin-top:12px}
.pdb-ch{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.pdb-ch h2{margin:0;font-size:var(--fs-base);color:var(--on-accent)}
.pdb-ch span{font-size:var(--fs-sm);color:var(--pb-ink2)}
.pdb-ch a{margin-left:auto;font-size:var(--fs-md);color:var(--c-amber-300-2)}
.pdb .table.pdb-table{background:transparent;color:var(--pb-ink)}
.pdb .table.pdb-table th,.pdb .table.pdb-table td{border-bottom-color:var(--pb-line);color:var(--pb-ink)}
.pdb .table.pdb-table thead th,.pdb .table.pdb-table tr:first-child th{background:transparent;color:var(--pb-ink2)}
.pdb .table.pdb-table tr:hover{background:rgb(var(--on-accent-rgb) / .04)}
.pdb .table.pdb-table .muted{color:var(--pb-ink2)}
.pdb .table.pdb-table tr.s-red td:first-child{box-shadow:inset 4px 0 0 var(--c-red-450)}
.pdb .table.pdb-table tr.s-yellow td:first-child{box-shadow:inset 4px 0 0 var(--c-amber-450)}
.pdb .table.pdb-table tr.s-green td:first-child{box-shadow:inset 4px 0 0 var(--c-green-550)}
.pdb-rate{min-width:150px}
.pdb-bar{display:block;height:12px;border-radius:var(--r-sm);background:var(--pb-line);overflow:hidden;margin-bottom:3px}
.pdb-bar i{display:block;height:100%;background:var(--c-teal-350);border-radius:var(--r-sm)}
.pdb-bar i.ok{background:var(--c-green-550)}.pdb-bar i.warn{background:var(--c-amber-450)}.pdb-bar i.bad{background:var(--c-red-450)}
.pdb-rate b{font-size:var(--fs-md);font-variant-numeric:tabular-nums}
.pdb-empty{display:flex;align-items:center;gap:8px;margin:0;color:var(--pb-ink2);font-size:var(--fs-ui)}
.pdb-inc{display:block;padding:9px 11px;border-radius:var(--r);background:rgb(var(--on-accent-rgb) / .05);border-left:4px solid var(--c-teal-350);color:var(--pb-ink);text-decoration:none;font-size:var(--fs-ui);margin-bottom:8px}
.pdb-inc span{color:var(--pb-ink2);font-size:var(--fs-sm)}
.pdb-inc.i-bad{border-left-color:var(--c-red-450);background:color-mix(in srgb,var(--c-red-450) 18%,transparent)}
.pdb-inc.i-warn{border-left-color:var(--c-amber-450)}
.pdb-inc:hover{background:rgb(var(--on-accent-rgb) / .10)}
.pdb-form label{display:block;font-size:var(--fs-md);color:var(--pb-ink2);margin:0 0 8px}
.pdb-form input,.pdb-form select{display:block;width:100%;margin-top:3px;background:rgb(var(--on-accent-rgb) / .92);color:var(--ink)}
.pdb-two{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pdb-form .btn{width:100%;margin-top:4px}
@media (max-width:900px){.pdb-grid{grid-template-columns:minmax(0,1fr)}.pdb-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.pdb{padding:14px;border-radius:var(--r-lg)}.pdb-kpi b{font-size:var(--fs-3xl)}}
@media (max-width:640px){.pdb-two{grid-template-columns:1fr}}

/* R149 — ইউজার ব্যবস্থাপনা: the risks first, one row per user */
.adm-sum{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 14px}
.adm-sum .chip{font-size:var(--fs-md);padding:5px 12px}
.adm-sum .chip a{color:inherit;text-decoration:none}
.table tr.row-risk td{background:var(--bad-bg)}
.table tr.row-warn td{background:var(--accent-bg)}
.table tr.row-off td{color:var(--ink-3)}
.adm-who b{display:block}
.adm-who small{color:var(--ink-3)}
.adm-acts{display:flex;gap:6px;flex-wrap:wrap}
.adm-acts form{margin:0}
.adm-scope{display:flex;gap:4px;flex-wrap:wrap;align-items:center}
.adm-scope .chip{font-weight:600}

/* ===================================================================== R150 — designed, not assembled
   Everything below is the system applied: hierarchy from type and tone, one radius per level,
   shadows that only separate layers, motion that answers an action, and three signatures --
   the header band with its saffron tick, the ward-map motif on brand surfaces, status chips
   with a dot. Shadow tokens the older rules use now resolve to the three levels. */
:root{--shadow:var(--sh-1);--shadow-1:var(--sh-1);--shadow-2:var(--sh-2);--shadow-3:var(--sh-3);--shadow-lg:var(--sh-2)}
html{scroll-behavior:smooth}
body{font-size:var(--fs-base);line-height:1.7}
h1{font-size:var(--fs-3xl);line-height:1.25;letter-spacing:-.4px}
h2,.card>h2,.dw-h h2{font-size:var(--fs-lg);line-height:1.35;letter-spacing:-.15px}
h3{font-size:var(--fs-ui);letter-spacing:0}
.toolbar{margin-bottom:var(--s-5);gap:var(--s-3) var(--s-4)}
.toolbar p.muted{max-width:72ch;margin:var(--s-1) 0 0;font-size:var(--fs-ui);line-height:1.55}
.muted{font-size:var(--fs-md)}
small,.table small{font-size:var(--fs-sm)}
:where(a,button,[role=button],input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid var(--brand);outline-offset:2px}
input:focus-visible,select:focus-visible,textarea:focus-visible{outline-offset:0}
.card{box-shadow:var(--sh-1);border-radius:var(--r-lg)}
.card.filterbar,.filterbar{background:var(--surface-2);box-shadow:none}
.card .card{box-shadow:none;background:var(--surface-2)}
.tablewrap{border-radius:var(--r-md)}
.table thead th,.table tr:first-child th{background:var(--surface-2);color:var(--ink-3);font-size:var(--fs-sm);font-weight:700;letter-spacing:.1px}
.table tbody tr:hover,.table tr:hover{background:var(--surface-2)}
.table th,.table td{font-size:var(--fs-ui)}
.table td.num,.table th.num,.kpi .v,.pdb-kpi b,.dash .stat .sv,.hero-count b{font-variant-numeric:tabular-nums}
.btn{border-radius:var(--r);transition:background var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease),transform var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.btn:hover{transform:translateY(-1px);box-shadow:var(--sh-2)}
.btn:active{transform:translateY(0);box-shadow:none;transition-duration:.06s}
.btn.secondary{background:var(--surface);border:1px solid var(--line);color:var(--brand)}
.btn.secondary:hover{background:var(--brand-ink);border-color:var(--c-teal-150-2);box-shadow:var(--sh-1)}
.btn.sm{border-radius:var(--r-sm)}
.card p a:not(.btn):not(.chip),.card li a:not(.btn):not(.chip),.table a:not(.btn):not(.chip):not(.elink),.footer a{color:var(--brand);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in srgb,var(--brand) 35%,transparent);transition:text-decoration-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
.card p a:not(.btn):not(.chip):hover,.card li a:not(.btn):not(.chip):hover,.table a:not(.btn):not(.chip):not(.elink):hover,.footer a:hover{text-decoration-color:currentColor}
input,select,textarea{border-radius:var(--r);transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease),background var(--t-fast) var(--ease)}
input:hover:not(:focus),select:hover:not(:focus),textarea:hover:not(:focus){border-color:var(--c-teal-250)}
label{font-size:var(--fs-md)}
.tabs{gap:2px;padding-bottom:0;margin:0 0 var(--s-5);border-bottom:1px solid var(--line)}
.tab{background:transparent;border:0;border-bottom:2px solid transparent;border-radius:var(--r-sm) var(--r-sm) 0 0;padding:9px 12px 8px;margin-bottom:-1px;color:var(--ink-2);font-size:var(--fs-ui);transition:color var(--t-fast) var(--ease),background var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.tab:hover{background:var(--brand-ink);color:var(--brand);border-color:transparent}
.tab.active{background:transparent;color:var(--brand);border-bottom-color:var(--brand);box-shadow:none;font-weight:700}
@media (max-width:760px){.tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs>*{flex:none;white-space:nowrap}}
.chip{font-size:var(--fs-sm);border-radius:var(--r-pill);transition:background var(--t-fast) var(--ease)}
span.chip.ok::before,span.chip.warn::before,span.chip.bad::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;margin-right:6px;vertical-align:1px;opacity:.9}
@media (min-width:701px){
  .navmenu{display:block;visibility:hidden;opacity:0;transform:translateY(-4px);pointer-events:none;
    transition:opacity var(--t-fast) var(--ease),transform var(--t-fast) var(--ease),visibility 0s linear var(--t-fast);border-radius:var(--r-md);box-shadow:var(--sh-3);padding:8px}
  .navgroup>button[aria-expanded="true"]+.navmenu{visibility:visible;opacity:1;transform:none;pointer-events:auto;transition-delay:0s}
  .navmenu a{border-radius:var(--r-sm);transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
  #mainnav>a.navlink,.navgroup>button{transition:color var(--t-fast) var(--ease),background var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
  .ctxbar{box-shadow:inset 0 -1px 0 var(--line)}
}
.userbox a,.userbox .bell{transition:background var(--t-fast) var(--ease)}
@keyframes r150-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
main.wrap{animation:r150-in var(--t-slow) var(--ease) both}
.dash .hero{border-radius:var(--r-xl);background-color:var(--c-teal-800);background-image:var(--motif),linear-gradient(120deg,var(--c-cyan-850) 0%,var(--c-teal-800) 55%,var(--c-teal-750-3) 100%);
  background-repeat:no-repeat,no-repeat;background-size:auto 125%,auto;background-position:right -60px top -30px,0 0;box-shadow:var(--sh-3)}
.dash .hero.eday{background-image:var(--motif),linear-gradient(120deg,var(--c-orange-850) 0%,var(--c-orange-750) 50%,var(--c-orange-650) 100%)}
.dash .hero::after{display:none}
.dash .hero h1{font-size:var(--fs-d);letter-spacing:-.6px}
.dash .hero-search{border-radius:var(--r-lg);box-shadow:var(--sh-3)}
.dash .hero-search button{background:var(--brand);border-radius:var(--r)}
.dash .hero-count{border-radius:var(--r-lg)}
.dash .stat-band{display:flex;flex-wrap:wrap;gap:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh-1);margin-bottom:var(--s-6)}
.dash .stat{flex:1 1 150px;flex-direction:row;align-items:center;gap:var(--s-3);padding:14px 16px;border:0;border-right:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);border-radius:0;box-shadow:none;transition:background var(--t-fast) var(--ease)}
.dash .stat:hover{transform:none;box-shadow:none;background:var(--surface-2);border-color:var(--line-soft)}
.dash .stat .si{width:34px;height:34px;border-radius:var(--r)}
.dash .stat .sv{font-size:var(--fs-2xl)}
.dash .ann2,.dash .dw,.dw{border-radius:var(--r-lg)}
.home-act{transition:transform var(--t-med) var(--ease),border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease)}
.home-act:hover{box-shadow:var(--sh-2)}
body.auth{background:var(--bg)}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .btn:hover,.home-act:hover,.kpi:hover,.dash .stat:hover{transform:none}
}
@media print{main.wrap{animation:none}}

/* ===================================================================== R151 — the next three
   1. The manual's cover carries the same ward motif as the home and the login (no more circles).
   2. Dashboard widgets stop looking alike: metric tiles become one divided strip, list widgets get
      a hairline rail, the card frame is flatter; the type of content, not the frame, tells them apart.
   3. Forms: a two-column rhythm, long fields full width, required marked, the action row pinned on
      phones so "সংরক্ষণ করুন" is never below the keyboard. */
.man-cover{background-color:var(--brand);background-image:var(--motif),linear-gradient(120deg,var(--c-cyan-850),var(--c-teal-800) 60%,var(--c-teal-750-3));
  background-repeat:no-repeat,no-repeat;background-size:auto 130%,auto;background-position:right -50px top -40px,0 0;border-radius:var(--r-xl);box-shadow:var(--sh-2)}
.man-cover::before,.man-cover::after{display:none}

.dash .dcard{border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.dash .dc-h{padding:14px 18px 2px}
.dash .dc-i{width:34px;height:34px;border-radius:var(--r)}
.dash .stats{display:flex;flex-wrap:wrap;gap:0;border:1px solid var(--d-line);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}
.dash .st{flex:1 1 120px;background:transparent;border-radius:0;border-right:1px solid var(--d-line);border-bottom:1px solid var(--d-line);padding:10px 12px;gap:2px;justify-content:flex-start}
.dash .st:hover{background:var(--surface-2)}
.dash .st.t-ok{background:transparent;box-shadow:inset 3px 0 0 var(--ok)}
.dash .st.t-warn{background:transparent;box-shadow:inset 3px 0 0 var(--accent)}
.dash .st.t-bad{background:transparent;box-shadow:inset 3px 0 0 var(--bad)}
.dash .st .v{font-size:var(--fs-xl)}
.dash .rows li{padding:9px 2px 9px 12px;box-shadow:inset 2px 0 0 var(--d-line);transition:background var(--t-fast) var(--ease)}
.dash .rows li:hover{background:var(--surface-2)}
.dash .rows li:last-child{border-bottom:0}
.dash .tl::before{background:var(--accent);opacity:.55}
.dash .empty2{border:1px dashed var(--d-line);background:transparent}

.formgrid{gap:var(--s-4) var(--s-5)}
.formgrid>div:has(>textarea),.formgrid>div.full{grid-column:1/-1}
.formgrid label{display:block;margin:0 0 5px;font-size:var(--fs-md);font-weight:600;color:var(--ink-2)}
.formgrid label.req::after,label.req::after{content:" *";color:var(--bad);font-weight:700}
.formgrid small.muted{display:block;margin-top:4px;font-size:var(--fs-sm);line-height:1.4}
.formgrid input,.formgrid select,.formgrid textarea{min-height:42px}
.formgrid textarea{min-height:96px}
.form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:var(--s-5) 0 0;padding-top:var(--s-4);border-top:1px solid var(--line-soft)}
.form-actions .btn{min-height:42px;padding-left:22px;padding-right:22px}
.form-actions .muted{margin-left:auto}
@media (max-width:640px){
  .form-actions{position:sticky;bottom:calc(68px + env(safe-area-inset-bottom));z-index:4;background:var(--surface);margin:var(--s-4) -6px 0;padding:10px 6px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);box-shadow:0 -8px 20px -12px rgb(var(--shade-rgb) / .25)}
  .form-actions .btn{flex:1 1 auto;min-height:46px}
}
@media print{.form-actions{position:static;box-shadow:none}}

/* ===================================================================== R152 — the home in bands
   A compact hero, then five bands in a fixed order, each with its own composition. Nothing is
   dragged or resized; the saved layout only says which bands show. */
.dash .hero{padding:16px 20px 18px;margin-bottom:var(--s-4)}
.dash .hero h1{font-size:var(--fs-2xl);margin:2px 0 0}
.dash .hero-row{margin-top:12px;align-items:center}
.dash .hero-actions{margin-top:8px}
.dash .hero-count{min-width:0;padding:8px 14px;flex-direction:row;align-items:baseline;gap:8px;border-radius:var(--r-md)}
.dash .hero-count b{font-size:var(--fs-3xl)}
.dash .hero-count .hc-name{display:none}
.dash .hero-count small{margin:0}
.dash .band .bcol .ann2{display:flex;grid-template-columns:none;margin:0;height:100%;align-items:flex-start;flex-direction:column;gap:8px;padding:14px 16px}
.dash .band .bcol .ann2 .ann2-b{width:100%;flex:none}
.dash .ann2 .ann2-i{display:none}
.dash .ann2 .ann2-b{width:100%}
.dash .ann2-more{padding:0;background:transparent;margin-top:auto}
.band-h{display:flex;align-items:center;gap:10px;margin:var(--s-5) 0 var(--s-3);font-size:var(--fs-sm);font-weight:700;color:var(--ink-3);letter-spacing:.2px}
.band-h i{flex:1;height:1px;background:var(--line)}
.band-h a{font-size:var(--fs-md);font-weight:600;color:var(--brand);text-decoration:none}
.band-h a:hover{text-decoration:underline}
.band{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s-3);align-items:stretch}
.band .bcol{grid-column:span 4;min-width:0;display:flex}
.band .bcol>*{flex:1;min-width:0}
.band .bcol.c3{grid-column:span 3}.band .bcol.c4{grid-column:span 4}.band .bcol.c5{grid-column:span 5}.band .bcol.c8{grid-column:span 8}
.band.b-today .bcol:only-child{grid-column:span 12}
.band.b-ops{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-3)}
.band.b-ops>.brow:only-child{grid-column:1/-1}
.bcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;display:flex;flex-direction:column;min-width:0;box-shadow:var(--sh-1)}
.bc-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.bc-h h2{margin:0;font-size:var(--fs-base);font-weight:700;letter-spacing:0}
.bc-sub{font-size:var(--fs-sm);color:var(--ink-3)}
.bc-more{margin-left:auto;font-size:var(--fs-md);font-weight:600;color:var(--brand);text-decoration:none}
.bc-more:hover{text-decoration:underline}
.bc-b{flex:1;display:flex;flex-direction:column;min-width:0}
.bc-foot{margin:auto 0 0;padding-top:10px}
.bline{display:flex;align-items:center;gap:7px;margin:4px 0 0;font-size:var(--fs-md);color:var(--ink-3)}
.bline .ic{color:var(--ok)}
.blist{list-style:none;margin:0;padding:0}
.blist li a{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid var(--line-soft);text-decoration:none;color:var(--ink);font-size:var(--fs-ui);transition:background var(--t-fast) var(--ease)}
.blist li:last-child a{border-bottom:0}
.blist li a:hover{background:var(--surface-2);margin:0 -8px;padding-left:8px;padding-right:8px;border-radius:var(--r-sm)}
.blist li a>span:first-child{flex:1;min-width:0}
.blist b{font-variant-numeric:tabular-nums;font-weight:700}
.blist b small{font-weight:500;color:var(--ink-3)}
.blist .t-ok{color:var(--ok)}.blist .t-warn{color:var(--accent-ink)}.blist .t-bad{color:var(--bad)}
.blist.work .dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--ok)}
.blist.work .dot.t-warn{background:var(--accent)}.blist.work .dot.t-bad{background:var(--bad)}
.blist.work .wl{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.35}
.blist.work .wl>span{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.blist.work .wl small{font-size:var(--fs-sm);color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.blist.work .wd{flex:none;font-size:var(--fs-sm);color:var(--ink-3)}
.blist.work .wd.late{color:var(--bad);font-weight:700}
.cnt{display:inline-block;font-size:var(--fs-xs);font-weight:700;border-radius:var(--r-pill);padding:1px 8px;background:var(--surface-2);color:var(--ink-2);vertical-align:2px;margin-left:4px}
.cnt.bad{background:var(--bad);color:var(--on-accent)}
.cp-top{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.cp-big{font-size:var(--fs-d);font-weight:800;line-height:1.1;letter-spacing:-.6px;font-variant-numeric:tabular-nums}
.cp-top>span{font-size:var(--fs-ui);color:var(--ink-3)}
.cp-top>a{margin-left:auto;font-size:var(--fs-md);font-weight:600;color:var(--brand);text-decoration:none}
.bcard.cp .home-legend a{text-decoration:none;color:var(--ink-3)}
.bcard.cp .home-legend a:hover b{text-decoration:underline}
.wbars{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 22px;margin-top:14px;font-size:var(--fs-md)}
.wbars a{display:grid;grid-template-columns:minmax(64px,auto) minmax(0,1fr) 46px;align-items:center;gap:8px;text-decoration:none;color:var(--ink)}
.wbars a>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink-2)}
.wbars i{display:block;height:8px;border-radius:var(--r-xs);background:var(--line-soft);overflow:hidden}
.wbars i b{display:block;height:100%;background:var(--brand);border-radius:var(--r-xs);transition:width var(--t-slow) var(--ease)}
.wbars strong{text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
.rstrip{display:grid;grid-template-columns:repeat(var(--n,4),minmax(0,1fr));background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh-1)}
.rcell{display:flex;flex-direction:column;gap:2px;padding:14px 18px;border-right:1px solid var(--line-soft);text-decoration:none;color:var(--ink);min-width:0;transition:background var(--t-fast) var(--ease)}
.rcell:last-child{border-right:0}
.rcell:hover{background:var(--surface-2)}
.rcell .k{font-size:var(--fs-sm);color:var(--ink-3)}
.rcell b{font-size:var(--fs-2xl);font-weight:800;line-height:1.2;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.rcell b small{font-size:var(--fs-ui);font-weight:600;color:var(--ink-3);letter-spacing:0}
.rcell .s{font-size:var(--fs-sm);color:var(--ink-3);min-height:1.4em}
.rcell.t-bad .s{color:var(--bad)}.rcell.t-warn .s{color:var(--accent-ink)}
.rcell.t-bad{box-shadow:inset 0 3px 0 var(--bad)}.rcell.t-warn{box-shadow:inset 0 3px 0 var(--accent)}
.rbar{display:block;height:6px;border-radius:var(--r-xs);background:var(--line-soft);overflow:hidden;margin-top:6px;width:100%}
.rbar b{display:block;height:100%;border-radius:var(--r-xs);background:var(--brand);font-size:0}
.rbar b.ok{background:var(--ok)}.rbar b.warn{background:var(--accent)}.rbar b.bad{background:var(--bad)}
.brow{display:flex;flex-direction:column;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;font-size:var(--fs-ui);box-shadow:var(--sh-1);min-width:0}
.brow .bh{display:flex;align-items:baseline;gap:8px}
.brow .bh b{font-size:var(--fs-base);font-weight:700}
.brow .bh a{margin-left:auto;font-size:var(--fs-md);font-weight:600;color:var(--brand);text-decoration:none}
.brow .bcells{display:grid;grid-template-columns:repeat(var(--n,3),minmax(0,1fr));gap:8px}
.brow .bcells a{display:flex;flex-direction:column;gap:0;padding:8px 10px;border-radius:var(--r);background:var(--surface-2);text-decoration:none;color:var(--ink);min-width:0;transition:background var(--t-fast) var(--ease)}
.brow .bcells a:hover{background:var(--brand-ink)}
.brow .bcells b{font-size:var(--fs-xl);font-weight:800;line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.brow .bcells small{font-size:var(--fs-sm);color:var(--ink-3);line-height:1.35}
.brow .t-warn{color:var(--accent-ink)}.brow .t-bad{color:var(--bad)}
.dash-foot{display:flex;justify-content:flex-end;margin:var(--s-5) 0 0;font-size:var(--fs-md)}
.dash-foot a{display:inline-flex;align-items:center;gap:6px;color:var(--ink-3);text-decoration:none}
.dash-foot a:hover{color:var(--brand)}
.dash .stat-band{margin-bottom:0}
@media (max-width:900px){
  .band .bcol,.band .bcol.c3,.band .bcol.c4,.band .bcol.c5,.band .bcol.c8{grid-column:span 6}
  .wbars{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rstrip{grid-template-columns:repeat(2,minmax(0,1fr))}
  .rcell:nth-child(2n){border-right:0}.rcell:nth-child(-n+2){border-bottom:1px solid var(--line-soft)}
}
@media (max-width:640px){
  .band{gap:var(--s-2)}
  .band .bcol,.band .bcol.c3,.band .bcol.c4,.band .bcol.c5,.band .bcol.c8{grid-column:span 12}
  .wbars{grid-template-columns:minmax(0,1fr)}
  .dash .hero{padding:14px 14px 16px}
  .dash .hero-count{width:100%;justify-content:center}
  .band.b-ops{grid-template-columns:minmax(0,1fr)}
  .brow .bcells{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* R153 — the সংখ্যা strip is one row: every chosen count side by side, scrolling sideways when it must */
.dash .stat-band{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.dash .stat{flex:1 1 0;min-width:132px;border-bottom:0}
.dash .stat:last-child{border-right:0}
.dash .stat .sk{white-space:nowrap}
.counts-pick{display:flex;flex-wrap:wrap;gap:8px 14px;margin:8px 0 12px}
.counts-pick label{display:inline-flex;align-items:center;gap:6px;font-weight:600;font-size:var(--fs-ui);margin:0}
.counts-pick input{width:auto;min-height:0}

/* R154 — phones: the hero's quick-add chips are not needed (the bottom bar and each page's যোগ করুন button do that job) */
@media (max-width:640px){.dash .hero-actions{display:none}}

/* ===================================================================== R155 — the header, organised
   Left: one lockup (seal, EMS, the long name on wide screens). Right: one family of quiet controls — the
   status word with its dot, the three page tools in a bracketed group, the person as a single chip, logout.
   No pills, no circles, no filled buttons. The menu row sits under a hairline, a shade lighter. */
.topbar .brand{gap:11px;letter-spacing:0}
.topbar .brand svg{width:30px;height:30px;border-radius:0}
.topbar .brand b{font-weight:800;letter-spacing:.4px;font-size:var(--fs-2xl);line-height:1}
.brand-t{display:none}
.netstatus[data-state="OFFLINE"]{--ns:var(--c-mist-550)}.netstatus[data-state="SYNCING"]{--ns:var(--c-blue-450)}
.netstatus[data-state="PENDING"]{--ns:var(--c-orange-550)}.netstatus[data-state="CONFLICT"]{--ns:var(--c-red-500)}
@media (min-width:1000px){
  .brand-t{display:inline;margin-left:2px;padding-left:12px;border-left:1px solid rgb(var(--on-accent-rgb) / .28);font-size:var(--fs-sm);font-weight:500;letter-spacing:.2px;color:rgb(var(--on-accent-rgb) / .78);line-height:1.2;align-self:center}
}
@media (min-width:701px){
  .topbar{min-height:60px;gap:20px}
  .userbox{gap:2px}
  .userbox a{border:0;border-radius:var(--r);padding:0 10px;min-height:38px;display:inline-flex;align-items:center;gap:8px;color:rgb(var(--on-accent-rgb) / .9);font-size:var(--fs-md)}
  .userbox a:hover{background:rgb(var(--on-accent-rgb) / .12);color:var(--on-accent)}
  .userbox a.netstatus{padding:0 10px 0 8px;font-size:var(--fs-sm);font-weight:600;color:rgb(var(--on-accent-rgb) / .85);border:0}
  .netstatus[data-state]{background:transparent}
  .userbox a.netstatus::before{content:"";width:8px;height:8px;border-radius:50%;flex:none;background:var(--ns,var(--c-green-550));box-shadow:0 0 0 3px color-mix(in srgb,var(--ns,var(--c-green-550)) 30%,transparent)}
  .userbox .tb-tools{display:inline-flex;align-items:center;gap:2px;margin:0 6px;padding:0 6px;border-left:1px solid rgb(var(--on-accent-rgb) / .18);border-right:1px solid rgb(var(--on-accent-rgb) / .18)}
  .userbox .bell{width:38px;height:38px;padding:0;justify-content:center;font-size:var(--fs-lg);color:rgb(var(--on-accent-rgb) / .85)}
  .userbox .bell .badge{top:3px;right:3px}
  .userbox a.me{padding:3px 12px 3px 4px;gap:10px;border-radius:var(--r-pill)}
  .userbox a.me:hover{background:rgb(var(--on-accent-rgb) / .12)}
  .userbox a.me .avatar,.userbox a.me .avatar-img{width:32px;height:32px;border-width:0;box-shadow:0 0 0 2px rgb(var(--on-accent-rgb) / .35);font-size:var(--fs-ui)}
  .userbox .who{text-align:left;line-height:1.15;gap:1px}
  .userbox .who b{font-size:var(--fs-md);font-weight:700;color:var(--on-accent)}
  .userbox .who small{font-size:var(--fs-xs);color:rgb(var(--on-accent-rgb) / .68)}
  .userbox a.logout{padding:0 10px;font-weight:600;margin-left:2px}
  .userbox a.logout .ic{display:block;opacity:.9}
  #mainnav{box-shadow:inset 0 1px 0 rgb(var(--on-accent-rgb) / .14),0 2px 10px rgb(var(--shade-rgb) / .18)}
  #mainnav>a.navlink,.navgroup>button{padding:11px 11px 10px;color:rgb(var(--on-accent-rgb) / .8)}
  .navgroup>button .chev{opacity:.55;margin-left:0}
  .navgroup>button .chev svg{width:12px;height:12px}
}
@media (min-width:701px) and (max-width:1100px){.userbox .who small{display:none}}
@media (max-width:700px){.userbox .tb-tools{display:contents}}   /* phones: the three round buttons sit in the row themselves */

/* ===================================================================== R159 — গ: teal bar, white menu row, teal hero
   The owner chose this from the board. The R152 hero comes back as it was; the menu row turns white so the
   top of the page is teal / white / teal instead of three dark layers. Phones already fold the menu white. */
body.page-dash .wrap{margin-top:16px}
@media (min-width:701px){
  #mainnav{background:var(--surface);border-bottom:1px solid var(--line);box-shadow:var(--sh-1)}
  #mainnav>a.navlink,.navgroup>button{color:var(--ink-2);border-bottom:3px solid transparent;padding:10px 10px 8px;font-size:var(--fs-md)}
  #mainnav>a.navlink:hover,.navgroup>button:hover{color:var(--brand);background:var(--brand-ink)}
  .navgroup>button[aria-expanded="true"]{color:var(--brand);background:var(--brand-ink);border-bottom-color:var(--accent)}
  #mainnav>a.navlink.cur,.navgroup.cur>button{color:var(--brand);border-bottom-color:var(--accent);font-weight:700}
  .navgroup>button .chev{opacity:.6}
  #mainnav.nav-tight .navgroup>button,#mainnav.nav-tight>a.navlink{padding-left:7px;padding-right:7px}
  .topbar{box-shadow:0 1px 0 rgb(var(--shade-rgb) / .12)}
}

/* ===================================================================== R161 — the developer badge
   One pill, as on the owner's other project: the MZ monogram on a teal disc, "Developed by", the name in
   the teal-to-saffron gradient. Used in the footer and on the login page. */
.dev-badge{display:inline-flex;align-items:center;gap:14px;padding:6px 22px 6px 6px;border-radius:var(--r-pill);white-space:nowrap;color:var(--on-accent);
  background:linear-gradient(90deg,var(--c-cyan-850) 0%,var(--c-teal-800) 55%,var(--c-teal-750-3) 100%);border:1px solid rgb(var(--on-accent-rgb) / .18);
  box-shadow:0 10px 24px -10px rgb(var(--black-rgb) / .45),inset 0 1px 0 rgb(var(--on-accent-rgb) / .12)}
.dev-mono{width:40px;height:40px;flex:none;display:inline-flex;align-items:center;justify-content:center;border-radius:12px;
  background:rgb(var(--on-accent-rgb) / .12);border:1px solid rgb(var(--on-accent-rgb) / .28)}
.dev-mono svg{width:28px;height:28px}
.dev-txt{display:inline-flex;align-items:center;gap:14px;line-height:1}
.dev-by{font-size:var(--fs-md);font-weight:700;letter-spacing:2.4px;text-transform:uppercase;color:var(--c-teal-150-3)}
.dev-name{font-size:var(--fs-lg);font-weight:800;letter-spacing:1.6px;line-height:1}
.dev-name span{color:var(--on-accent)}
.dev-name em{font-style:normal;color:var(--accent)}
.footer.ft .dev-badge{border-color:rgb(var(--on-accent-rgb) / .28);box-shadow:0 14px 30px -12px rgb(var(--black-rgb) / .6),inset 0 1px 0 rgb(var(--on-accent-rgb) / .14)}
.lg-foot .dev-badge{padding:4px 16px 4px 4px;gap:10px}
.lg-foot .dev-mono{width:32px;height:32px;border-radius:9px}.lg-foot .dev-mono svg{width:22px;height:22px}
.lg-foot .dev-txt{gap:10px}.lg-foot .dev-by{font-size:var(--fs-xs);letter-spacing:2px}.lg-foot .dev-name{font-size:var(--fs-base)}
@media (max-width:700px){.dev-badge{gap:10px;padding:5px 16px 5px 5px}.dev-mono{width:34px;height:34px;border-radius:10px}.dev-mono svg{width:24px;height:24px}.dev-txt{gap:10px}.dev-by{font-size:var(--fs-xs);letter-spacing:2px}.dev-name{font-size:var(--fs-base)}}
@media (max-width:900px){.lg-foot{flex-wrap:wrap;gap:8px 16px}}

/* ===================================================================== R162 — the footer, two rows
   A teal band with the saffron edge. Row one: the lockup on the left, the developer badge on the right.
   Row two, under a hairline: the links on the left, the copyright and build on the right. Nothing else. */
.footer.ft{max-width:none;margin:36px 0 0;padding:0;display:block;position:relative;overflow:hidden;
  background:linear-gradient(180deg,var(--c-teal-800) 0%,var(--c-cyan-850) 100%);color:var(--on-accent);border-top:3px solid var(--accent);font-size:var(--fs-md)}
.footer.ft::after{content:"";position:absolute;right:-60px;top:-30px;bottom:-30px;width:min(48%,600px);pointer-events:none;opacity:.12;
  background:var(--motif) right center / cover no-repeat;-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 55%);mask-image:linear-gradient(90deg,transparent 0,#000 55%)}
.footer.ft a{color:rgb(var(--on-accent-rgb) / .86);text-decoration:none;transition:color var(--t-fast) var(--ease)}
.footer.ft a:hover{color:var(--on-accent);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:2px;text-underline-offset:4px}
.ft-in{position:relative;z-index:1;max-width:1600px;margin:0 auto;padding:18px 20px 14px;display:flex;flex-direction:column;gap:12px}
.ft-row{display:flex;align-items:center;justify-content:space-between;gap:12px 24px;flex-wrap:wrap}
.ft-brand{display:flex;align-items:center;gap:12px}
.ft-base{border-top:1px solid rgb(var(--on-accent-rgb) / .14);padding-top:10px;font-size:var(--fs-sm);color:rgb(var(--on-accent-rgb) / .62)}
.ft-links{display:flex;flex-wrap:wrap;gap:2px 18px;font-weight:600}
.ft-links a{display:inline-flex;align-items:center;gap:6px;min-height:28px}
.ft-copy{white-space:nowrap}
@media (max-width:700px){
  .ft-brand .ic-lockup{height:52px;width:243px}
  .footer.ft{margin-top:28px}
  .footer.ft::after{display:none}
  .ft-in{padding:16px 16px 12px}
  .ft-row{flex-direction:column;align-items:flex-start;gap:12px}
  .ft-links{gap:0 14px}
  .ft-links a{min-height:40px}
  .ft-copy{white-space:normal}
}
@media (max-width:1600px){.footer.ft .ft-in{padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right))}}

/* ===================================================================== R164 — the login, one composition
   The deep teal; the ward map drawn once across it in white; one centred row — the mark, the name and the claim on the left, the white card on the right; a hairline and the credit underneath.
   The seal stamps in, the words rise, the card lifts. prefers-reduced-motion: the final frame. */
body.auth.lg{min-height:100vh;display:flex;flex-direction:column;position:relative;overflow-x:hidden;color:var(--on-accent);
  background:radial-gradient(900px 520px at 85% 110%,rgb(var(--c-teal-350-rgb) / .22),transparent 60%),linear-gradient(160deg,var(--c-cyan-850) 0%,var(--c-teal-800) 55%,var(--c-teal-750-3) 100%)}
.lg-map{position:fixed;inset:0;width:100%;height:100%;opacity:.26;pointer-events:none;z-index:0}
.lg-map .lm{stroke-dasharray:1400;stroke-dashoffset:1400;animation:lg-draw 1.6s var(--ease) forwards}
.lg-map .lm:nth-child(1){animation-delay:.1s}.lg-map .lm:nth-child(2){animation-delay:.3s}.lg-map .lm:nth-child(3){animation-delay:.45s}.lg-map .lm:nth-child(4){animation-delay:.55s}
.lg-map .lm:nth-child(5){animation-delay:.65s}.lg-map .lm:nth-child(6){animation-delay:.8s}.lg-map .lm:nth-child(7){animation-delay:.9s}.lg-map .lm:nth-child(8){animation-delay:1s}
.lg-map .ld{transform-box:fill-box;transform-origin:center;transform:scale(0);animation:lg-pop .5s var(--ease) forwards,lg-breathe 4.5s ease-in-out 2.2s infinite alternate}
.lg-map .ld:nth-child(1){animation-delay:1.1s,2.2s}.lg-map .ld:nth-child(2){animation-delay:1.25s,2.9s}.lg-map .ld:nth-child(3){animation-delay:1.4s,3.4s}.lg-map .ld:nth-child(4){animation-delay:1.5s,2.5s}.lg-map .ld:nth-child(5){animation-delay:1.6s,3.1s}
.lg-wrap{position:relative;z-index:1;flex:1;width:100%;max-width:1180px;margin:0 auto;padding:48px 24px 32px;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,460px);gap:48px 72px;align-items:center}
.lg-brand{display:flex;flex-direction:column;gap:var(--s-6);color:var(--on-accent);animation:lg-fade var(--t-slow) var(--ease) both}
.lg-id{display:flex;align-items:center;gap:16px}
.lg-claim{margin:0;max-width:34ch;font-size:clamp(19px,1.9vw,24px);line-height:1.45;font-weight:700;color:var(--on-accent);animation:lg-rise .6s var(--ease) 1s both}
.lg-form{display:flex;justify-content:center}
.lg-card{width:100%;max-width:460px;background:var(--surface);color:var(--ink);border-radius:var(--r-lg);padding:36px 36px 32px;box-shadow:0 30px 60px -24px rgb(var(--black-rgb) / .55),0 0 0 1px rgb(var(--black-rgb) / .04);animation:lg-rise .7s var(--ease) .35s both}
.lg-card h1{margin:0;font-size:var(--fs-2xl);letter-spacing:-.4px}
.lg-sub{margin:4px 0 var(--s-6);color:var(--ink-3);font-size:var(--fs-ui)}
.lg-f{display:flex;flex-direction:column;gap:var(--s-4)}
.lg-field{position:relative}
.lg-field label{display:block;margin:0 0 6px;font-size:var(--fs-md);font-weight:600;color:var(--ink-2)}
.lg-field input{min-height:48px;font-size:var(--fs-lg);border-radius:var(--r);background:var(--surface-2);border:1px solid var(--line)}
.lg-field input:focus{background:var(--surface)}
.lg-field::after{content:"";position:absolute;left:12px;right:12px;bottom:0;height:2px;border-radius:2px;background:var(--brand);transform:scaleX(0);transform-origin:left;transition:transform var(--t-med) var(--ease)}
.lg-field:focus-within::after{transform:scaleX(1)}
.lg-btn{width:100%;min-height:50px;margin-top:var(--s-2);font-size:var(--fs-lg);font-weight:700;border-radius:var(--r);display:inline-flex;justify-content:center;gap:10px}
.lg-btn .ic{transition:transform var(--t-fast) var(--ease)}
.lg-btn:hover .ic{transform:translateX(4px)}
.lg-alert{animation:lg-shake .45s var(--ease) both}
.lg-links{display:flex;flex-direction:column;gap:8px;margin:var(--s-5) 0 0;font-size:var(--fs-md)}
.lg-links a{color:var(--brand);font-weight:600;text-decoration:none;width:fit-content;background:linear-gradient(currentColor,currentColor) no-repeat 0 100% / 0 1px;transition:background-size var(--t-med) var(--ease)}
.lg-links a:hover{background-size:100% 1px}
.lg-foot{position:relative;z-index:1;width:100%;max-width:1180px;margin:0 auto;padding:18px 24px 28px;display:flex;align-items:center;justify-content:center;gap:12px 24px;flex-wrap:wrap;font-size:var(--fs-sm);color:rgb(var(--on-accent-rgb) / .72)}
.lg-foot::before{content:"";position:absolute;left:24px;right:24px;top:0;height:1px;background:linear-gradient(90deg,transparent,rgb(var(--on-accent-rgb) / .35) 30%,color-mix(in srgb,var(--accent) 70%,transparent) 70%,transparent)}
@keyframes lg-fade{from{opacity:0}to{opacity:1}}
@keyframes lg-draw{to{stroke-dashoffset:0}}
@keyframes lg-pop{from{transform:scale(0)}60%{transform:scale(1.5)}to{transform:scale(1)}}
@keyframes lg-breathe{from{opacity:.45}to{opacity:1}}
@keyframes lg-stamp{0%{transform:scale(1.6) rotate(-10deg);opacity:0}55%{transform:scale(.94) rotate(1deg);opacity:1}100%{transform:scale(1) rotate(0)}}
@keyframes lg-ring{0%{transform:scale(.6);opacity:.8}100%{transform:scale(1.7);opacity:0}}
@keyframes lg-rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes lg-shake{0%,100%{transform:none}20%{transform:translateX(-6px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}
@media (max-width:900px){
  .lg-wrap{grid-template-columns:minmax(0,1fr);gap:28px;padding:28px 18px 20px;align-content:start}
  .lg-brand{gap:14px;align-items:center;text-align:center}
  .lg-id{flex-direction:column;gap:10px}
  .lg-claim{max-width:none;font-size:var(--fs-lg)}
  .lg-card{padding:24px 20px 22px;max-width:none}
  .lg-foot{flex-direction:column;gap:10px;padding:16px 18px 24px}
}
@media (prefers-reduced-motion:reduce){
  .lg-brand,.lg-claim,.lg-card,.lg-alert{animation:none}
  .lg-map .lm{stroke-dashoffset:0;animation:none}
  .lg-map .ld{transform:none;animation:none;opacity:1}
}
@media print{.lg-map,.lg-brand{display:none}}

/* ===================================================================== R168 — the lockup, one drawing
   Icon::lockup() is the brand pack's horizontal lockup inline; dark on teal, light on white. */
.ic-lockup{display:block;height:auto;max-width:100%}
.ic-lockup text{font-family:inherit}
.ft-brand .ic-lockup{height:64px;width:299px}
.rd-logo{padding:6px 12px}
.rd-logo .ic-lockup{height:34px;width:77px}
.ph-mark .ic-lockup{height:24px;width:54px}
.lg-id .ic-lockup{height:88px;width:411px;overflow:visible}
.lg-id .lk-seal{transform-box:fill-box;transform-origin:center;animation:lg-stamp .55s cubic-bezier(.2,1.3,.4,1) .55s both;filter:drop-shadow(0 8px 18px rgb(var(--black-rgb) / .3))}
.lg-id .lk-text{transform-box:fill-box;animation:lg-rise .6s var(--ease) .8s both}
@media (max-width:900px){.lg-id .ic-lockup{height:64px;width:299px}}
@media (prefers-reduced-motion:reduce){.lg-id .lk-seal,.lg-id .lk-text{animation:none}}

/* R171 — a planning date is not a countdown: the tentative block carries words, not a number */
.dash .hero-count.tentative .hc-main{gap:8px;align-items:center}
.dash .hero-count.tentative .hc-unit{font-size:var(--fs-lg)}
.dash .hero-count.tentative small{color:var(--c-teal-150-3)}

/* R172 — আরও: the R150 fade keeps collapsed dropdowns in the layout (display:block + hidden); inside the আরও list the
   sub-menus are static, so each collapsed one left a tall empty gap. There they collapse for real. */
@media (min-width:701px){
  .navmore .navmenu .navgroup>.navmenu{display:none;visibility:visible;opacity:1;transform:none;pointer-events:auto;transition:none}
  .navmore .navmenu .navgroup>button[aria-expanded="true"]+.navmenu{display:block}
}

/* ===================================================================== R173 — the dashboard grid
   One set of tiles, two compositions. Under 1400px: a 12-column grid, tiles in band order (order:var(--o)); the
   main/rail wrappers dissolve (display:contents). From 1400px: a main column and a 400px rail. */
.dash-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s-3);align-items:stretch}
.dash-main,.dash-rail,.dm-row{display:contents}
.dt{order:var(--o,99);min-width:0;display:flex;grid-column:span 12}
.dt>*{flex:1;min-width:0}
.dt.sp3{grid-column:span 3}.dt.sp4{grid-column:span 4}.dt.sp5{grid-column:span 5}.dt.sp6{grid-column:span 6}.dt.sp8{grid-column:span 8}.dt.sp12{grid-column:span 12}
.dt-h{grid-column:span 12;display:block}
.dt-h .band-h{margin:var(--s-4) 0 0}
.dt-h.rail-only{display:none}
.dash-grid .stat-band{margin-bottom:0}
@media (max-width:900px){
  .dt.sp3,.dt.sp4,.dt.sp5,.dt.sp8{grid-column:span 6}
}
@media (max-width:640px){
  .dash-grid{gap:var(--s-2)}
  .dt.sp3,.dt.sp4,.dt.sp5,.dt.sp6,.dt.sp8{grid-column:span 12}
}
@media (min-width:1400px){
  /* R174/R175: one shared grid -- rows 1-4 eight columns of content + four of rail, then full-width strips; every tile placed by row (--r) and column (--c) */
  .dash-grid{grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s-3) var(--s-4);align-items:stretch}
  .dt,.dt.sp3,.dt.sp4,.dt.sp5,.dt.sp6,.dt.sp8,.dt.sp12{grid-row:var(--r,auto);grid-column:var(--c,1/9);order:0}
  .dt-h{align-self:end}
  .dt-h.rail-only{display:block}
  .dt-ready,.dt-counts{align-self:start}
}

/* ---------- R185: ইউজার কার্যক্রম (activity.php) ---------- */
.act-filter .formgrid{grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr))}
.act-quick{display:inline-flex;gap:6px;flex-wrap:wrap;vertical-align:middle}
.act-quick .chip{text-decoration:none}
.act-h{margin:4px 0 10px}
.act-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr));gap:12px;margin-bottom:12px}
.act-stats .v.act-last{font-size:var(--fs-lg)}
.act-top{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:0 0 14px}
.act-top .chip{text-decoration:none}
.act-day{margin:16px 0 6px;font-size:var(--fs-md);color:var(--ink-3);position:sticky;top:0;background:var(--surface);padding:4px 0;z-index:1}
.act-list{list-style:none;margin:0;padding:0;border-left:2px solid var(--line)}
.act-item{display:grid;grid-template-columns:52px 1fr;gap:10px;padding:7px 0 7px 12px;position:relative;border-bottom:1px solid var(--line)}
.act-item::before{content:"";position:absolute;left:-6px;top:13px;width:10px;height:10px;border-radius:50%;background:var(--brand);border:2px solid var(--surface)}
.act-item.act-bad::before{background:var(--bad)}
.act-item.act-warn::before{background:var(--warn)}
.act-item.act-ok::before{background:var(--ok)}
.act-item time{font-variant-numeric:tabular-nums;color:var(--ink-3);font-size:var(--fs-sm)}
.act-body{min-width:0;overflow-wrap:anywhere}
.act-who{font-weight:700;margin-right:4px}
.act-meta{display:block;margin-top:2px}
.act-ch{margin-top:4px}
.act-ch summary{cursor:pointer;color:var(--brand);font-size:var(--fs-sm)}
.act-ch .table{margin-top:6px;font-size:var(--fs-sm)}
.act-ch td{overflow-wrap:anywhere}
@media(max-width:520px){.act-item{grid-template-columns:42px 1fr;gap:6px}}

/* R186: a password shown to Super Administrator */
.pw-val{font-family:ui-monospace,Menlo,Consolas,monospace;background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:1px 6px;user-select:all}
