@font-face{font-family:'Vazirmatn';src:url(fonts/Vazirmatn.woff2) format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
/* ───────── سامانه رأی‌گیری · طراحی v2 ───────── */
:root{
  --bg:#f3f5fa; --surface:#ffffff; --surface2:#f7f9fd; --ink:#0f1b33; --muted:#5a6a86; --line:#e2e8f2;
  --brand:#2a4fd6; --brand-ink:#ffffff; --brand-soft:#e8edfd;
  --ok:#0f9d6b; --ok-soft:#e2f6ee; --warn:#b7791f; --warn-soft:#fdf3dc; --danger:#d63a3a; --danger-soft:#fdeaea;
  --shadow:0 1px 2px rgba(15,27,51,.06),0 8px 24px -12px rgba(15,27,51,.18);
  --radius:14px; --ring:0 0 0 3px rgba(42,79,214,.28);
  color-scheme:light;
}
:root[data-theme="dark"]{
  --bg:#0a1120; --surface:#121c31; --surface2:#16213a; --ink:#e9eefb; --muted:#93a4c4; --line:#233250;
  --brand:#6f95ff; --brand-ink:#08112a; --brand-soft:#1b2a52;
  --ok:#34d399; --ok-soft:#10372c; --warn:#f2b84b; --warn-soft:#3a2d12; --danger:#ff7676; --danger-soft:#3b1b22;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 10px 30px -14px rgba(0,0,0,.7); --ring:0 0 0 3px rgba(111,149,255,.35);
  color-scheme:dark;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{font-size:15px}
body{font-family:'Vazirmatn',Tahoma,sans-serif;background:var(--bg);color:var(--ink);line-height:1.75;direction:rtl;min-height:100vh;overflow-x:hidden;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;touch-action:manipulation}
a{color:var(--brand)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
svg.i{width:1.15em;height:1.15em;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
:focus-visible{outline:none;box-shadow:var(--ring);border-radius:8px}

/* ── Form controls ── */
.field{margin-bottom:14px}
.field>label,.lbl{display:block;font-size:.84rem;font-weight:600;color:var(--muted);margin-bottom:6px}
.input,select.input,textarea.input{width:100%;background:var(--surface);border:1.5px solid var(--line);border-radius:10px;padding:10px 13px;transition:border-color .15s,box-shadow .15s;min-height:44px}
.input:focus{outline:none;border-color:var(--brand);box-shadow:var(--ring)}
.input::placeholder{color:color-mix(in srgb,var(--muted) 65%,transparent)}
textarea.input{min-height:120px;resize:vertical;line-height:1.8}
.ltr{direction:ltr;text-align:left}
.hint{font-size:.78rem;color:var(--muted);margin-top:5px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:560px){.row2{grid-template-columns:1fr}}

.btn{text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:1.5px solid transparent;border-radius:10px;padding:9px 16px;min-height:42px;font-weight:600;font-size:.9rem;transition:transform .08s,background .15s,border-color .15s,opacity .15s;white-space:nowrap}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.btn-primary{background:var(--brand);color:var(--brand-ink)}
.btn-primary:hover:not([disabled]){filter:brightness(1.08)}
.btn-ok{background:var(--ok);color:#fff}
.btn-danger{background:var(--danger);color:#fff}
.btn-soft{background:var(--brand-soft);color:var(--brand)}
.btn-ghost{background:transparent;border-color:var(--line);color:var(--ink)}
.btn-ghost:hover:not([disabled]){background:var(--surface2);border-color:color-mix(in srgb,var(--line) 60%,var(--muted))}
.btn-sm{min-height:34px;padding:5px 11px;font-size:.8rem;border-radius:8px}
.btn-icon{width:38px;height:38px;min-height:0;padding:0;border-radius:10px}
.btn-sm.btn-icon{width:34px;height:34px}
.btn-block{width:100%}
.btn-lg{min-height:52px;font-size:1rem;border-radius:12px}

.switch{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-bottom:1px dashed var(--line)}
.switch:last-of-type{border-bottom:0}
.switch b{display:block;font-size:.92rem}.switch small{color:var(--muted);font-size:.78rem}
.tg{position:relative;width:46px;height:26px;flex-shrink:0}
.tg input{position:absolute;inset:0;opacity:0;cursor:pointer;z-index:1}
.tg i{position:absolute;inset:0;background:var(--line);border-radius:26px;transition:.2s}
.tg i:before{content:'';position:absolute;top:3px;right:3px;width:20px;height:20px;background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:.2s}
.tg input:checked+i{background:var(--brand)}
.tg input:checked+i:before{transform:translateX(-20px)}
.tg input:focus-visible+i{box-shadow:var(--ring)}

/* ── Cards / layout ── */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);margin-bottom:16px}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.card-h h2,.card-h h3{font-size:1rem;font-weight:800;display:flex;align-items:center;gap:8px}
.card-h h2 .i,.card-h h3 .i{color:var(--brand)}
.muted{color:var(--muted)}
.page{display:none;min-height:100vh}
.page.active{display:block;animation:rise .25s ease}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.wrap{max-width:720px;margin:0 auto;padding:18px 16px 40px}
.empty{text-align:center;padding:34px 16px;color:var(--muted)}
.empty .i{width:38px;height:38px;opacity:.5;margin-bottom:8px}

/* ── Top bar ── */
.topbar{position:sticky;top:0;z-index:30;background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.topbar-in{max-width:1180px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:10px}
.brand{display:flex;align-items:center;gap:10px;font-weight:800;min-width:0;flex:1}
.brand-mark{width:36px;height:36px;border-radius:11px;background:linear-gradient(135deg,var(--brand),#18a0a0);display:grid;place-items:center;color:#fff;flex-shrink:0}
.brand-mark .i{width:20px;height:20px}
.brand span.t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.98rem}
.pill{display:inline-flex;align-items:center;gap:6px;background:var(--brand-soft);color:var(--brand);border-radius:99px;padding:3px 12px;font-size:.78rem;font-weight:700;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok)}.pill.warn{background:var(--warn-soft);color:var(--warn)}.pill.danger{background:var(--danger-soft);color:var(--danger)}.pill.gray{background:var(--surface2);color:var(--muted);border:1px solid var(--line)}

/* ── Login ── */
#page-login.active{display:grid;grid-template-columns:1fr 1fr;min-height:100vh}
.login-art{background:radial-gradient(circle at 20% 15%,#4d73ff 0,transparent 45%),radial-gradient(circle at 85% 90%,#14b8a6 0,transparent 45%),#16276b;color:#fff;display:flex;flex-direction:column;justify-content:center;padding:48px;position:relative;overflow:hidden}
.login-art h2{font-size:1.9rem;font-weight:900;line-height:1.5;margin-bottom:10px}
.login-art p{opacity:.85;max-width:380px}
.login-art .ballot{width:150px;height:150px;margin-bottom:26px;opacity:.95}
.login-art:after{content:'';position:absolute;inset:auto -80px -80px auto;width:280px;height:280px;border-radius:50%;border:40px solid rgba(255,255,255,.07)}
.login-side{display:flex;align-items:center;justify-content:center;padding:24px}
.login-box{width:100%;max-width:390px}
.login-box h1{font-size:1.35rem;font-weight:900;margin-bottom:4px}
.login-box .sub{color:var(--muted);margin-bottom:24px;font-size:.9rem}
.pw{position:relative}.pw .input{padding-left:44px}
.pw button{position:absolute;left:6px;top:50%;transform:translateY(-50%);background:none;border:0;color:var(--muted);width:34px;height:34px;display:grid;place-items:center;border-radius:8px}
.login-foot{margin-top:26px;text-align:center;font-size:.76rem;color:var(--muted)}
@media(max-width:820px){#page-login.active{display:flex;flex-direction:column}.login-art{padding:28px 22px;min-height:0}.login-art .ballot{width:70px;height:70px;margin-bottom:12px}.login-art h2{font-size:1.2rem}.login-art p{font-size:.85rem}.login-side{flex:1;align-items:flex-start;padding-top:28px}}

/* ── Admin shell ── */
.shell{max-width:1180px;margin:0 auto;padding:18px 16px 50px;display:grid;grid-template-columns:230px 1fr;gap:22px;align-items:start}
.nav{position:sticky;top:76px;display:flex;flex-direction:column;gap:4px}
.nav button{display:flex;align-items:center;gap:10px;background:none;border:0;border-radius:11px;padding:11px 14px;font-weight:600;color:var(--muted);text-align:right;transition:.15s}
.nav button:hover{background:var(--surface);color:var(--ink)}
.nav button.active{background:var(--surface);color:var(--brand);box-shadow:var(--shadow)}
.nav button .badge{margin-right:auto;background:var(--brand);color:var(--brand-ink);font-size:.7rem;border-radius:99px;padding:0 7px;min-width:20px;text-align:center}
.tabpane{display:none}.tabpane.active{display:block;animation:rise .2s ease}
@media(max-width:860px){
  .shell{grid-template-columns:1fr;gap:10px;padding-top:10px}
  .nav{position:sticky;top:57px;z-index:20;flex-direction:row;overflow-x:auto;background:var(--bg);padding:6px 0;margin:0 -16px;padding-inline:16px;scrollbar-width:none}
  .nav::-webkit-scrollbar{display:none}
  .nav button{white-space:nowrap;padding:8px 13px;font-size:.85rem;background:var(--surface);border:1px solid var(--line)}
  .nav button.active{border-color:var(--brand)}
}

/* ── Stats / results ── */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}
.stat b{display:block;font-size:1.65rem;font-weight:900;line-height:1.3;color:var(--brand)}
.stat span{font-size:.78rem;color:var(--muted)}
.meter{height:8px;background:var(--line);border-radius:8px;overflow:hidden}
.meter i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),#18a0a0);border-radius:8px;transition:width .7s cubic-bezier(.2,.8,.2,1)}
.res{display:flex;flex-direction:column;gap:10px}
.res-item{padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.res-item.elected{border-color:color-mix(in srgb,var(--ok) 50%,var(--line));background:linear-gradient(90deg,var(--ok-soft),var(--surface) 70%)}
.res-item.tie{border-color:color-mix(in srgb,var(--warn) 55%,var(--line))}
.res-top{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.rank{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:.82rem;background:var(--surface2);border:1px solid var(--line);flex-shrink:0}
.res-item.elected .rank{background:var(--ok);color:#fff;border-color:var(--ok)}
.res-name{font-weight:700;flex:1;min-width:0}
.res-val{font-weight:800;color:var(--brand);white-space:nowrap}.res-val small{font-weight:500;color:var(--muted)}
.res-item.elected .meter i{background:var(--ok)}
.live{display:flex;align-items:center;gap:7px;justify-content:center;font-size:.75rem;color:var(--muted);padding:12px}
.live i{width:7px;height:7px;border-radius:50%;background:var(--ok);animation:pulse 1.6s infinite}
@keyframes pulse{0%,100%{opacity:.25}50%{opacity:1}}
.legend{display:flex;gap:8px;flex-wrap:wrap;font-size:.78rem;color:var(--muted);margin-bottom:12px}

/* ── Lists ── */
.list{display:flex;flex-direction:column;gap:8px}
.li{display:flex;align-items:center;gap:12px;padding:11px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface);flex-wrap:wrap}
.li-main{flex:1;min-width:180px}
.li-t{font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap;word-break:break-word}
.li-s{font-size:.78rem;color:var(--muted);margin-top:1px;word-break:break-word}
.li-a{display:flex;gap:5px;flex-wrap:wrap}
.avatar{width:38px;height:38px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;font-weight:800;flex-shrink:0}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;align-items:center}
.toolbar .input{flex:1;min-width:160px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{border:1.5px solid var(--line);background:var(--surface);border-radius:99px;padding:4px 14px;font-size:.82rem;font-weight:600;color:var(--muted)}
.chip.on{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}
.cred{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;margin-top:10px;width:100%}
@media(max-width:560px){.cred{grid-template-columns:1fr}}

/* ── Ballot ── */
.hero{padding:18px;border-radius:var(--radius);background:linear-gradient(135deg,var(--brand-soft),var(--surface));border:1px solid var(--line);margin-bottom:16px}
.hero h1{font-size:1.1rem;font-weight:900;margin-bottom:4px}
.hero p{font-size:.88rem;color:var(--muted)}
.hero .need{display:inline-flex;align-items:center;gap:6px;margin-top:10px;background:var(--brand);color:var(--brand-ink);border-radius:99px;padding:3px 14px;font-size:.82rem;font-weight:700}
.cands{display:flex;flex-direction:column;gap:10px;padding-bottom:110px}
.cand{display:flex;align-items:center;gap:14px;text-align:right;width:100%;background:var(--surface);border:2px solid var(--line);border-radius:14px;padding:15px 16px;transition:border-color .15s,background .15s,transform .1s}
.cand:hover{border-color:color-mix(in srgb,var(--brand) 55%,var(--line))}
.cand:active{transform:scale(.995)}
.cand .tick{width:26px;height:26px;border-radius:8px;border:2px solid var(--line);display:grid;place-items:center;flex-shrink:0;color:transparent;transition:.15s}
.cand .tick .i{width:16px;height:16px;stroke-width:3}
.cand.sel{border-color:var(--ok);background:var(--ok-soft)}
.cand.sel .tick{background:var(--ok);border-color:var(--ok);color:#fff}
.cand b{display:block;font-size:1rem}.cand small{color:var(--muted);font-size:.8rem}
.dock{position:fixed;inset:auto 0 0 0;z-index:25;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(10px);border-top:1px solid var(--line);padding:12px 16px calc(12px + env(safe-area-inset-bottom))}
.dock-in{max-width:720px;margin:0 auto}
.dock .meter{margin-bottom:9px}
.dock-t{display:flex;justify-content:space-between;font-size:.82rem;color:var(--muted);margin-bottom:6px}

/* ── Round 2 ── */
.r2c{display:flex;align-items:center;gap:12px;width:100%;text-align:right;background:var(--surface);border:2px solid var(--line);border-radius:12px;padding:13px 15px;margin-bottom:9px}
.r2c.sel{border-color:var(--brand);background:var(--brand-soft)}
.r2c.self{opacity:.55;cursor:not-allowed}
.notice{display:flex;gap:11px;align-items:flex-start;padding:13px 15px;border-radius:12px;background:var(--brand-soft);color:var(--ink);font-size:.9rem;margin-bottom:14px;border:1px solid color-mix(in srgb,var(--brand) 25%,transparent)}
.notice.ok{background:var(--ok-soft);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}
.notice.warn{background:var(--warn-soft);border-color:color-mix(in srgb,var(--warn) 35%,transparent)}
.notice .i{margin-top:5px;color:var(--brand)}.notice.ok .i{color:var(--ok)}.notice.warn .i{color:var(--warn)}
.center-state{text-align:center;padding:48px 10px}
.center-state .big{width:76px;height:76px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;margin:0 auto 16px}
.center-state .big .i{width:38px;height:38px}
.center-state.ok .big{background:var(--ok-soft);color:var(--ok)}
.center-state h2{font-size:1.2rem;font-weight:900;margin-bottom:6px}

/* ── Modal / toast / loader ── */
.overlay{position:fixed;inset:0;background:rgba(7,12,26,.55);backdrop-filter:blur(3px);z-index:100;display:none;align-items:center;justify-content:center;padding:16px}
.overlay.open{display:flex;animation:fade .15s}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:var(--surface);border:1px solid var(--line);border-radius:18px;width:100%;max-width:480px;max-height:90vh;overflow:auto;box-shadow:0 30px 80px -20px rgba(0,0,0,.5);animation:pop .2s cubic-bezier(.2,.9,.3,1.1)}
.modal.wide{max-width:640px}
@keyframes pop{from{transform:translateY(14px) scale(.97);opacity:0}to{transform:none;opacity:1}}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line);font-weight:800}
.modal-b{padding:20px}
.modal-f{display:flex;gap:8px;justify-content:flex-start;padding:14px 20px;border-top:1px solid var(--line);flex-wrap:wrap}
@media(max-width:560px){.overlay{align-items:flex-end;padding:0}.modal{border-radius:18px 18px 0 0;max-width:none}}
#toasts{position:fixed;top:14px;left:50%;transform:translateX(-50%);z-index:300;display:flex;flex-direction:column;gap:8px;width:calc(100% - 28px);max-width:400px;pointer-events:none}
.toast{display:flex;gap:10px;align-items:center;padding:12px 15px;border-radius:12px;background:var(--ink);color:var(--bg);font-size:.88rem;font-weight:600;box-shadow:0 12px 30px -10px rgba(0,0,0,.5);animation:rise .25s;pointer-events:auto}
.toast.success{background:#0c7a54;color:#fff}.toast.error{background:#b42828;color:#fff}
#loader{position:fixed;inset:0;z-index:250;background:color-mix(in srgb,var(--bg) 70%,transparent);display:none;place-items:center}
#loader.show{display:grid}
.spin{width:38px;height:38px;border:3.5px solid var(--line);border-top-color:var(--brand);border-radius:50%;animation:sp .7s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}

/* QR modal */
.qrbox{display:grid;place-items:center;padding:14px;background:#fff;border-radius:14px;width:fit-content;margin:0 auto 12px;border:1px solid var(--line)}
.qrbox img{display:block;width:230px;height:230px;image-rendering:pixelated}
.urlbox{direction:ltr;text-align:left;font-size:.72rem;color:var(--muted);word-break:break-all;background:var(--surface2);border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:12px}
.tbl{width:100%;border-collapse:collapse;font-size:.84rem}
.tbl th,.tbl td{padding:7px 9px;border-bottom:1px solid var(--line);text-align:right}
.tbl th{color:var(--muted);font-weight:600;font-size:.76rem}
.tbl td.ltr{font-family:ui-monospace,Menlo,monospace}
.log-i{display:flex;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:.84rem}
.log-i time{color:var(--muted);font-size:.74rem;white-space:nowrap;min-width:110px}
.danger-zone{border-color:color-mix(in srgb,var(--danger) 40%,var(--line))}
.foot{text-align:center;font-size:.75rem;color:var(--muted);padding:18px 10px}

/* ── Print (QR cards) ── */
#print-root{display:none}
@media print{
  body>*:not(#print-root){display:none!important}
  #print-root{display:block!important;background:#fff;color:#000}
  .pcards{display:grid;grid-template-columns:1fr 1fr;gap:0}
  .pcard{break-inside:avoid;border:1px dashed #999;padding:14px 12px;text-align:center;min-height:9.2cm;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px}
  .pcard .pt{font-weight:800;font-size:13px}.pcard .pp{font-size:10.5px;color:#444}.pcard .pn{font-weight:900;font-size:15px;margin-top:2px}
  .pcard .pi{font-size:9.5px;color:#333;line-height:1.8}.pcard svg{width:150px;height:150px}
  .pcard .pf{font-size:8.5px;color:#777;border-top:1px solid #ddd;padding-top:4px;margin-top:3px;width:100%}
  .pcards.single{grid-template-columns:1fr}.pcards.single .pcard{min-height:auto;border:0;padding-top:40px}.pcards.single svg{width:240px;height:240px}
  .pcards.single .pt{font-size:22px}.pcards.single .pn{font-size:22px}.pcards.single .pi,.pcards.single .pp{font-size:14px}
  @page{margin:10mm}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ── Demo mode ── */
body.demo .wrap *:not(input):not(textarea),body.demo .shell *:not(input):not(textarea),body.demo .topbar *{-webkit-user-select:none;user-select:none}
.demo-wm{position:fixed;inset:0;z-index:90;pointer-events:none;opacity:.07;background-repeat:repeat}
:root[data-theme="dark"] .demo-wm{opacity:.1;filter:invert(1)}
.banner{display:flex;gap:10px;align-items:center;justify-content:center;flex-wrap:wrap;padding:9px 16px;background:var(--warn-soft);color:var(--ink);font-size:.84rem;border-bottom:1px solid color-mix(in srgb,var(--warn) 35%,var(--line));text-align:center}
.banner.danger{background:var(--danger-soft);border-color:color-mix(in srgb,var(--danger) 35%,var(--line))}
.banner a{font-weight:800}
