/* ZB kit لایهٔ ۲ — ارتقای سراسریِ کنترل‌ها (beUI: Input، Checkbox، Radio، Select، Animated Badge، Loader، OTP، Pull to Refresh، Drawer، Number). */

/* ── Input: لرزش/تیک ── */
.zb-shake{animation:zbShake .45s cubic-bezier(.36,.07,.19,.97)}
@keyframes zbShake{10%,90%{transform:translateX(-1px)}20%,80%{transform:translateX(3px)}30%,50%,70%{transform:translateX(-5px)}40%,60%{transform:translateX(5px)}}
html input.zb-bad,html textarea.zb-bad,html select.zb-bad{border-color:var(--zb-bad)!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--zb-bad) 12%,transparent)!important}
html input.zb-ok:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]){
    background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%2322a06b%22 stroke-width=%222.6%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12l5 5 9-10%22/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-size:16px;background-position:left 12px center;padding-left:36px}

/* ── Checkbox (draw-on) و Radio (نقطهٔ فنری) — سراسری، به‌جز کنترل‌های پنهان/سفارشی ── */
html input[type=checkbox]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):not([hidden]),
html input[type=radio]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):not([hidden]){
    -webkit-appearance:none;appearance:none;width:20px;height:20px;flex:none;margin:0;display:inline-grid;place-content:center;vertical-align:middle;cursor:pointer;
    border:1.5px solid var(--border-strong,var(--border));background:var(--surface);transition:background .2s var(--zb-ease-out),border-color .2s var(--zb-ease-out),transform .14s var(--zb-ease-out)}
html input[type=checkbox]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):not([hidden]){border-radius:6px}
html input[type=radio]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):not([hidden]){border-radius:50%}
html input[type=checkbox]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native)::before{
    content:"";width:12px;height:12px;background:#fff;
    clip-path:polygon(14% 52%,0 66%,40% 100%,100% 22%,86% 8%,40% 72%);transform:scale(0);transition:transform .22s cubic-bezier(.34,1.6,.5,1)}
html input[type=radio]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native)::before{
    content:"";width:8px;height:8px;border-radius:50%;background:#fff;transform:scale(0);transition:transform .26s cubic-bezier(.34,1.6,.5,1)}
html input[type=checkbox]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):checked,
html input[type=radio]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):checked{background:var(--zb-accent);border-color:var(--zb-accent)}
html input[type=checkbox]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):checked::before,
html input[type=radio]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):checked::before{transform:scale(1)}
html input[type=checkbox]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):active,
html input[type=radio]:not(.sr-only):not(.peer):not(.hidden):not(.form-check-input):not(.zb-native):active{transform:scale(.88)}
html input[type=checkbox]:disabled,html input[type=radio]:disabled{opacity:.45;cursor:not-allowed}

/* ── Select: پیکانِ ظریف ── */
html select.form-select,html select.form-input,html select.form-control{-webkit-appearance:none;appearance:none;
    background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23888%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22m6 9 6 6 6-6%22/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-size:16px;background-position:left 12px center;padding-left:36px}

/* ── Animated Badge: وضعیتِ نوبت با نقطهٔ ضربان‌دار ── */
.badge-pending,.st-wait,.zbd-pill.wait{position:relative}
.badge-pending::before,.st-wait::before,.zbd-pill.wait::before,.badge-confirmed::before,.st-ok::before,.badge-completed::before,.badge-cancelled::before,.st-bad::before{
    content:"";display:inline-block;width:6px;height:6px;border-radius:50%;margin-inline-end:6px;vertical-align:middle;background:currentColor}
.badge-pending::before,.st-wait::before,.zbd-pill.wait::before{animation:zbBadge 1.6s infinite}
@keyframes zbBadge{0%{box-shadow:0 0 0 0 currentColor}70%{box-shadow:0 0 0 6px transparent}100%{box-shadow:0 0 0 0 transparent}}

/* ── Loader (dots) و دکمهٔ در حال ارسال ── */
.zb-ld{display:inline-flex;gap:4px;align-items:center;height:1em;vertical-align:middle}
.zb-ld i{width:6px;height:6px;border-radius:50%;background:currentColor;animation:zbLd 1s infinite ease-in-out}
.zb-ld i:nth-child(2){animation-delay:.15s}.zb-ld i:nth-child(3){animation-delay:.3s}
@keyframes zbLd{0%,80%,100%{transform:scale(.55);opacity:.45}40%{transform:scale(1);opacity:1}}
.zb-busy{cursor:progress!important;justify-content:center}
.zb-skel{position:relative;overflow:hidden;background:var(--surface-2);border-radius:10px;color:transparent!important}
.zb-skel::after{content:"";position:absolute;inset:0;transform:translateX(100%);background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--surface) 70%,transparent),transparent);animation:zbSk 1.4s infinite}
@keyframes zbSk{to{transform:translateX(-100%)}}
.zb-shimmer{background:linear-gradient(90deg,var(--muted) 0%,var(--text) 50%,var(--muted) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:zbShim 2.5s linear infinite}
@keyframes zbShim{to{background-position:-200% 0}}

/* ── OTP ── */
.zb-otp{position:relative;display:flex;gap:8px;justify-content:center;margin-inline:auto;width:max-content;max-width:100%}
.zb-otp .zb-otp-in{position:absolute;inset:0;width:100%!important;height:100%!important;opacity:0;border:0;padding:0;margin:0;font-size:16px;letter-spacing:40px;caret-color:transparent;z-index:2}
.zb-otp-s{width:48px;height:56px;border-radius:14px;border:1.5px solid var(--border-strong,var(--border));background:var(--surface);display:grid;place-items:center;
    font-size:22px;font-weight:600;color:var(--text);transition:border-color .2s var(--zb-ease-out),box-shadow .2s var(--zb-ease-out),transform .2s}
.zb-otp-s.act{border-color:var(--zb-accent);box-shadow:0 0 0 4px var(--zb-accent-soft)}
.zb-otp-s.act:empty::after{content:"";width:2px;height:22px;background:var(--zb-accent);animation:zbCaret 1s steps(1) infinite}
@keyframes zbCaret{50%{opacity:0}}
.zb-otp-s.in{animation:zbOtpIn .22s var(--zb-ease-out)}
@keyframes zbOtpIn{from{transform:translateY(14px);opacity:0;filter:blur(4px)}}
.zb-otp.done .zb-otp-s{border-color:var(--zb-ok);background:color-mix(in srgb,var(--zb-ok) 6%,var(--surface))}
@media(max-width:380px){.zb-otp-s{width:42px;height:50px}}

/* ── Pull to Refresh ── */
.zb-ptr{position:fixed;top:0;left:50%;z-index:1500;width:36px;height:36px;margin-top:10px;border-radius:50%;background:var(--surface);box-shadow:0 6px 18px rgba(0,0,0,.15);
    display:grid;place-items:center;opacity:0;transform:translate(-50%,-44px);transition:opacity .2s;pointer-events:none}
.zb-ptr span{width:16px;height:16px;border-radius:50%;border:2px solid var(--zb-accent);border-top-color:transparent}
.zb-ptr.ready span{border-color:var(--zb-ok);border-top-color:transparent}
.zb-ptr.spin{animation:zbSpin .8s linear infinite}
@keyframes zbSpin{to{transform:translate(-50%,20px) rotate(360deg)}}

/* ── Drawer: سایدبارِ پنل روی موبایل ── */
@media (max-width:1023.98px){
  html body.zb-dashboard #sidebar{transition:transform .5s cubic-bezier(.32,.72,0,1)!important;border-radius:0 0 0 24px;box-shadow:-30px 0 60px -20px rgba(0,0,0,.35)!important}
  html body.zb-dashboard #sidebar-overlay{background:color-mix(in srgb,var(--zb-navy,#16204a) 35%,transparent)!important;-webkit-backdrop-filter:blur(8px) saturate(1.3);backdrop-filter:blur(8px) saturate(1.3)}
}

/* ── Number roll ── */
.zb-roll{display:inline-flex;direction:ltr;unicode-bidi:isolate}
.zb-roll-c{display:inline-block;height:1.2em;overflow:hidden;line-height:1.2em}
.zb-roll-s{display:flex;flex-direction:column;transition:transform .9s cubic-bezier(.16,1,.3,1)}
.zb-roll-s i{font-style:normal;height:1.2em;line-height:1.2em}

@media (prefers-reduced-motion:reduce){.zb-shake,.zb-otp-s.in{animation:none}.zb-ld i,.zb-skel::after,.zb-shimmer,.badge-pending::before,.st-wait::before{animation:none}.zb-roll-s{transition:none}}

/* ═══ فایل‌گزین — دکمهٔ بومیِ «Choose File» به قرصِ پالت ═══ */
html input[type=file]{font:inherit;font-size:13px;color:var(--muted);max-width:100%;padding:6px!important;border:1.5px dashed var(--border-strong,var(--border))!important;
  border-radius:14px!important;background:var(--surface)!important;cursor:pointer;transition:border-color .2s,background .2s;min-height:0}
html input[type=file]:hover{border-color:var(--zb-accent)!important;background:color-mix(in srgb,var(--zb-accent) 4%,var(--surface))!important}
html input[type=file]::file-selector-button{font:inherit;font-size:12.5px;font-weight:500;margin-inline-end:12px;padding:8px 14px;border:0;border-radius:10px;cursor:pointer;
  color:#fff;background:var(--zb-accent-solid,var(--zb-accent));transition:background .2s}
html input[type=file]::file-selector-button:hover{background:color-mix(in srgb,var(--zb-accent) 82%,var(--zb-navy,#141A3A))}

/* ═══ تاریخ‌گزینِ شمسی (zb-jdate.js) ═══ */
html input.zjd-src{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important;padding:0!important;border:0!important}
.zjd{display:flex;align-items:center;gap:9px;width:100%;min-height:44px;padding:9px 13px;border-radius:12px;border:1px solid var(--border-strong,var(--border));
  background:var(--surface);color:var(--text);font:inherit;font-size:14px;text-align:start;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.zjd:hover{border-color:color-mix(in srgb,var(--zb-accent) 55%,var(--border))}
.zjd:focus-visible,.zjd[aria-expanded=true]{outline:0;border-color:var(--zb-accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--zb-accent) 16%,transparent)}
.zjd svg{width:18px;height:18px;flex:none;color:var(--zb-accent)}
.zjd.empty .zjd-v{color:var(--muted)}
.zjd.bad{border-color:var(--zb-bad);box-shadow:0 0 0 4px color-mix(in srgb,var(--zb-bad) 15%,transparent);animation:zjdShake .4s}
@keyframes zjdShake{25%{transform:translateX(4px)}75%{transform:translateX(-4px)}}
.zjd:disabled{opacity:.55;cursor:not-allowed}
.zjd-scrim{position:fixed;inset:0;z-index:1400;display:none}
.zjd-scrim.on{display:block}.zjd-scrim.on.m{background:rgba(10,12,30,.4);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.zjd-pop{position:fixed;z-index:1401;width:308px;padding:14px;border-radius:20px;background:var(--surface);border:1px solid var(--border-strong,var(--border));
  box-shadow:0 24px 60px -20px rgba(10,12,40,.35);opacity:0;visibility:hidden;transform:translateY(-6px) scale(.98);transform-origin:top;
  transition:opacity .2s,transform .28s cubic-bezier(.16,1,.3,1),visibility 0s .28s;direction:rtl}
.zjd-pop.on{opacity:1;visibility:visible;transform:none;transition:opacity .2s,transform .28s cubic-bezier(.16,1,.3,1),visibility 0s}
.zjd-pop.sheet{left:0!important;right:0;bottom:0;top:auto!important;width:auto;border-radius:24px 24px 0 0;padding:16px 16px calc(16px + env(safe-area-inset-bottom,0px));transform:translateY(100%)}
.zjd-pop.sheet.on{transform:none}
.zjd-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.zjd-t{font-weight:600;font-size:15px}
.zjd-nav{width:34px;height:34px;border-radius:11px;border:1px solid var(--border);background:transparent;color:var(--text);font-size:18px;line-height:1;cursor:pointer}
.zjd-nav:hover{border-color:var(--zb-accent);color:var(--zb-accent)}
.zjd-wk,.zjd-g{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center}
.zjd-wk span{font-size:11.5px;color:var(--muted);padding:4px 0}
.zjd-wk .fri{color:var(--zb-bad)}
.zjd-d{aspect-ratio:1;min-height:36px;border:0;border-radius:12px;background:transparent;color:var(--text);font:inherit;font-size:13.5px;cursor:pointer;position:relative;transition:background .15s,color .15s,transform .12s}
.zjd-d:hover:not([disabled]){background:color-mix(in srgb,var(--zb-accent) 10%,transparent)}
.zjd-d:active:not([disabled]){transform:scale(.92)}
.zjd-d:focus-visible{outline:2px solid var(--zb-accent);outline-offset:-2px}
.zjd-d.fri{color:var(--zb-bad)}
.zjd-d.today::after{content:"";position:absolute;bottom:5px;left:50%;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--zb-gold)}
.zjd-d.sel{background:var(--zb-accent-solid,var(--zb-accent));color:#fff;font-weight:600;box-shadow:0 8px 16px -8px var(--zb-accent)}
.zjd-d.sel::after{background:#fff}
.zjd-d[disabled]{opacity:.28;cursor:not-allowed}
.zjd-f{display:flex;gap:6px;margin-top:12px}
.zjd-f button{flex:1;border:1px solid var(--border);background:transparent;color:var(--text);border-radius:11px;padding:8px 0;font:inherit;font-size:12.5px;cursor:pointer}
.zjd-f button:hover{border-color:var(--zb-accent);color:var(--zb-accent)}
.zjd-f button.pri{background:var(--zb-navy,#141A3A);border-color:transparent;color:#fff}
@media(prefers-reduced-motion:reduce){.zjd-pop{transition:none}.zjd.bad{animation:none}}

/* ساعت‌گزین */
.zjt-pop{width:320px}
.zjt-now{font-size:15px;font-weight:600;color:var(--zb-accent)}
.zjt-l{font-size:11.5px;color:var(--muted);margin:6px 2px 6px}
.zjt-hh,.zjt-mm{display:grid;grid-template-columns:repeat(6,1fr);gap:4px}
.zjt-hh .zjd-d,.zjt-mm .zjd-d{aspect-ratio:auto;min-height:34px;font-size:13px}
.zjd-wk span{font-size:9px;letter-spacing:-.3px;white-space:nowrap;overflow:hidden}
