/* ==========================================================================
   رزروکده — سیستم طراحی مشترک
   RTL • فونت وزیرمتن • حالت روشن/تاریک • بدون وابستگی به Bootstrap
   ========================================================================== */

/* ---------------------------------------------------------------- توکن‌ها */
:root{
  --brand:#7C3AED;
  --brand-600:#6D28D9;
  --brand-700:#5B21B6;
  --brand-soft:#F5F1FF;
  --brand-ring:rgba(124,58,237,.18);

  --accent:#F59E0B;
  --ok:#10B981;
  --ok-soft:#ECFDF5;
  --warn:#F59E0B;
  --warn-soft:#FFFBEB;
  --err:#EF4444;
  --err-soft:#FEF2F2;
  --info:#3B82F6;
  --info-soft:#EFF6FF;

  --bg:#F7F7FB;
  --bg-elev:#FFFFFF;
  --bg-sunken:#F1F1F6;
  --surface-2:#FAFAFD;
  --line:#E7E7F0;
  --line-strong:#D7D7E3;

  --ink:#171724;
  --ink-2:#4A4A63;
  --ink-3:#7B7B96;
  --ink-inv:#FFFFFF;

  --r-sm:8px;
  --r:12px;
  --r-lg:18px;
  --r-xl:24px;
  --r-full:999px;

  --sh-1:0 1px 2px rgba(20,20,43,.05);
  --sh-2:0 4px 16px rgba(20,20,43,.07);
  --sh-3:0 12px 36px rgba(20,20,43,.10);
  --sh-brand:0 10px 30px rgba(124,58,237,.28);

  --sidebar-w:264px;
  --header-h:64px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

html[data-theme="dark"]{
  --brand:#A78BFA;
  --brand-600:#8B5CF6;
  --brand-700:#7C3AED;
  --brand-soft:#241C3D;
  --brand-ring:rgba(167,139,250,.24);

  --ok-soft:#0C2C22;
  --warn-soft:#2E2410;
  --err-soft:#301717;
  --info-soft:#12233D;

  --bg:#0E0E15;
  --bg-elev:#17172099;
  --bg-sunken:#121219;
  --surface-2:#1B1B26;
  --line:#282836;
  --line-strong:#363648;

  --ink:#F2F2F7;
  --ink-2:#B4B4C8;
  --ink-3:#8383A0;

  --sh-1:0 1px 2px rgba(0,0,0,.4);
  --sh-2:0 4px 16px rgba(0,0,0,.45);
  --sh-3:0 12px 36px rgba(0,0,0,.55);
  --sh-brand:0 10px 30px rgba(124,58,237,.35);
}

/* ---------------------------------------------------------------- پایه */
*,*::before,*::after{box-sizing:border-box;}

html{ -webkit-text-size-adjust:100%; scroll-behavior:smooth; }

body{
  margin:0;
  font-family:Vazirmatn,"Segoe UI",system-ui,-apple-system,sans-serif;
  font-size:15px;
  line-height:1.75;
  background:var(--bg);
  color:var(--ink);
  direction:rtl;
  -webkit-font-smoothing:antialiased;
  transition:background .25s var(--ease),color .25s var(--ease);
}

body.has-dark-bg{ background:var(--bg); }

h1,h2,h3,h4,h5{ margin:0 0 .6rem; font-weight:800; line-height:1.45; letter-spacing:-.01em; }
h1{font-size:2rem;} h2{font-size:1.4rem;} h3{font-size:1.12rem;} h4{font-size:1rem;}
p{margin:0 0 .9rem;}
a{color:var(--brand-600);text-decoration:none;transition:color .15s var(--ease);}
a:hover{color:var(--brand-700);}
img{max-width:100%;display:block;}
hr{border:0;border-top:1px solid var(--line);margin:1.5rem 0;}
small{font-size:.8rem;}

/* اندازه‌ی پیش‌فرض آیکون‌های SVG.
   آیکون‌های NY.icon() فقط viewBox دارند و width/height ندارند؛ بدون این قاعده،
   هر آیکونی که داخل یک عنصرِ بدون قاعده‌ی اختصاصی قرار می‌گرفت (مثل نشان بالای
   صفحه‌ی فرود، ردیف‌های اطلاعات، متادیتای صفحه‌ی رزرو و ...) تا ۱۰۰ پیکسل بزرگ
   می‌شد و چیدمان را کاملاً به‌هم می‌ریخت.
   هر قاعده‌ی کلاس‌داری (مثل .btn svg یا .kpi-ico svg) اولویت بالاتری دارد و این را بازنویسی می‌کند. */
svg{ width:18px;height:18px;flex:none;vertical-align:middle; }

::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:99px;border:3px solid var(--bg);}
::-webkit-scrollbar-track{background:transparent;}

:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; border-radius:6px; }

/* اعداد فارسی برای نمایش */
.fa-num{ font-variant-numeric:tabular-nums; font-feature-settings:"ss02"; }

/* ---------------------------------------------------------------- چیدمان */
.container{ width:min(1200px,calc(100% - 2.5rem)); margin-inline:auto; }
.container-sm{ width:min(760px,calc(100% - 2.5rem)); margin-inline:auto; }
.container-xs{ width:min(460px,calc(100% - 2rem)); margin-inline:auto; }

.stack{display:flex;flex-direction:column;}
.row{display:flex;align-items:center;}
.row-between{display:flex;align-items:center;justify-content:space-between;gap:1rem;}
.wrap{flex-wrap:wrap;}
.gap-1{gap:.35rem;} .gap-2{gap:.6rem;} .gap-3{gap:1rem;} .gap-4{gap:1.5rem;}
.grow{flex:1 1 auto;min-width:0;}
.center{display:flex;align-items:center;justify-content:center;}
.text-center{text-align:center;}
.mt-0{margin-top:0}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mt-4{margin-top:2.25rem}
.mb-0{margin-bottom:0}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.mb-3{margin-bottom:1.5rem}
.hidden{display:none !important;}

/* نمایش/پنهان‌سازی بر اساس عرض صفحه.
   نبودِ .hide-sm در نسخه‌ی قبل باعث می‌شد متن دکمه‌ی «صفحه‌ی رزرو من» روی موبایل
   هم نمایش داده شود و هدر پنل بشکند. */
@media (max-width:640px){ .hide-sm{display:none !important;} }
@media (min-width:641px){ .only-sm{display:none !important;} }

.grid{display:grid;gap:1.15rem;}
.grid > *{ min-width:0; }          /* جلوگیری از سرریز افقیِ جدول/نمودار داخل ستون‌های Grid */
.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));}
.grid-3{grid-template-columns:repeat(3,minmax(0,1fr));}
.grid-4{grid-template-columns:repeat(4,minmax(0,1fr));}
.grid-auto{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));}

/* چیدمان‌های «ستون اصلی + ستون کناری».
   قبلاً این نسبت‌ها با style درون‌خطی و یک‌بار بررسیِ window.innerWidth در جاوااسکریپت
   تنظیم می‌شد؛ نتیجه این بود که با چرخاندن گوشی یا تغییر اندازه‌ی پنجره چیدمان اصلاح
   نمی‌شد و چون Inline بود، هیچ Media Query ای هم نمی‌توانست آن را بازنویسی کند. */
.grid-split{ grid-template-columns:1.55fr 1fr; }
.grid-split-wide{ grid-template-columns:1.6fr 1fr; }
.grid-side{ grid-template-columns:minmax(0,1fr) 380px; }
.grid-side-start{ grid-template-columns:360px minmax(0,1fr); }
@media (max-width:1100px){ .grid-side,.grid-side-start{ grid-template-columns:1fr; } }
@media (max-width:960px){ .grid-split,.grid-split-wide{ grid-template-columns:1fr; } }

@media (max-width:960px){
  .grid-4{grid-template-columns:repeat(2,minmax(0,1fr));}
  .grid-3{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:620px){
  .grid-2,.grid-3,.grid-4{grid-template-columns:1fr;}
  h1{font-size:1.55rem;}
}

/* ---------------------------------------------------------------- کارت */
.card{
  background:var(--bg-elev);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  box-shadow:var(--sh-1);
  padding:1.35rem;
  transition:box-shadow .2s var(--ease),transform .2s var(--ease),border-color .2s var(--ease);
}
html[data-theme="dark"] .card{ background:var(--surface-2); }
.card.hoverable:hover{ box-shadow:var(--sh-2); transform:translateY(-2px); }
.card-pad-lg{padding:1.9rem;}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.1rem;}
.card-head h3{margin:0;}
.card-sub{color:var(--ink-3);font-size:.83rem;margin:0;}

.section-title{display:flex;align-items:center;gap:.6rem;font-size:1.15rem;font-weight:800;margin:0 0 1rem;}
.section-title .ico{color:var(--brand);display:flex;}

/* ---------------------------------------------------------------- دکمه */
.btn{
  --btn-bg:var(--brand);
  --btn-fg:#fff;
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  font-family:inherit;font-size:.9rem;font-weight:700;
  padding:.62rem 1.15rem;
  border-radius:var(--r);
  border:1px solid transparent;
  background:var(--btn-bg);
  color:var(--btn-fg);
  cursor:pointer;
  white-space:nowrap;
  transition:transform .12s var(--ease),box-shadow .18s var(--ease),background .18s var(--ease),opacity .18s;
}
.btn:hover{ background:var(--brand-600); color:#fff; }
.btn:active{ transform:translateY(1px); }
.btn:disabled{ opacity:.55; cursor:not-allowed; transform:none; }
.btn svg{width:18px;height:18px;flex:none;}

.btn-primary{ box-shadow:var(--sh-brand); }
.btn-ghost{ --btn-bg:transparent; --btn-fg:var(--ink-2); border-color:var(--line-strong); }
.btn-ghost:hover{ background:var(--bg-sunken); color:var(--ink); }
.btn-soft{ --btn-bg:var(--brand-soft); --btn-fg:var(--brand-700); }
.btn-soft:hover{ background:var(--brand-soft); filter:brightness(.97); color:var(--brand-700); }
html[data-theme="dark"] .btn-soft{ --btn-fg:var(--brand); }
.btn-danger{ --btn-bg:var(--err); }
.btn-danger:hover{ background:#DC2626; }
.btn-success{ --btn-bg:var(--ok); }
.btn-success:hover{ background:#059669; }
.btn-block{ width:100%; }
.btn-lg{ padding:.85rem 1.7rem; font-size:1rem; border-radius:var(--r-lg); }
.btn-sm{ padding:.4rem .75rem; font-size:.8rem; border-radius:var(--r-sm); }
.btn-icon{ padding:.5rem; width:38px;height:38px; }

.btn-loading{ position:relative; color:transparent !important; pointer-events:none; }
.btn-loading::after{
  content:"";position:absolute;width:16px;height:16px;
  border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;
  animation:spin .6s linear infinite;
}
.btn-ghost.btn-loading::after{ border-color:var(--line-strong); border-top-color:var(--brand); }
@keyframes spin{to{transform:rotate(360deg);}}

/* ---------------------------------------------------------------- فرم */
.field{ margin-bottom:1rem; }
.label{ display:block; font-size:.83rem; font-weight:600; color:var(--ink-2); margin-bottom:.4rem; }
.label .req{ color:var(--err); }

.input,.select,.textarea{
  width:100%;
  font-family:inherit;font-size:.92rem;
  color:var(--ink);
  background:var(--bg-elev);
  border:1px solid var(--line-strong);
  border-radius:var(--r);
  padding:.68rem .9rem;
  transition:border-color .15s var(--ease),box-shadow .15s var(--ease),background .15s;
}
html[data-theme="dark"] .input,
html[data-theme="dark"] .select,
html[data-theme="dark"] .textarea{ background:var(--bg-sunken); }
.input::placeholder,.textarea::placeholder{ color:var(--ink-3); }
.input:focus,.select:focus,.textarea:focus{
  outline:none;border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-ring);
}
.input:disabled,.select:disabled{ background:var(--bg-sunken); color:var(--ink-3); cursor:not-allowed; }
.textarea{ min-height:100px; resize:vertical; line-height:1.8; }
.select{ appearance:none; padding-left:2.2rem;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237B7B96' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:left .8rem center;background-size:16px;
}
.input-hint{ font-size:.76rem; color:var(--ink-3); margin-top:.35rem; }
.input-err{ font-size:.78rem; color:var(--err); margin-top:.35rem; }
.input.is-invalid{ border-color:var(--err); }
.input-ltr{ direction:ltr; text-align:left; }

.input-group{ position:relative; display:flex; align-items:stretch; }
.input-group .input{ border-radius:0 var(--r) var(--r) 0; }
.input-group .addon{
  display:flex;align-items:center;padding:0 .85rem;font-size:.82rem;color:var(--ink-3);
  background:var(--bg-sunken);border:1px solid var(--line-strong);border-left:0;
  border-radius:var(--r) 0 0 var(--r); white-space:nowrap; direction:ltr;
}

.check{ display:flex; align-items:flex-start; gap:.6rem; cursor:pointer; user-select:none; }
.check input{ width:18px;height:18px;accent-color:var(--brand);margin-top:.28rem;flex:none;cursor:pointer; }
.check-body strong{ display:block; font-size:.9rem; font-weight:600; }
.check-body span{ font-size:.78rem; color:var(--ink-3); }

.switch{ position:relative;display:inline-flex;align-items:center;gap:.65rem;cursor:pointer; }
.switch input{ position:absolute;opacity:0;width:0;height:0; }
.switch .track{
  width:44px;height:25px;border-radius:99px;background:var(--line-strong);
  position:relative;transition:background .2s var(--ease);flex:none;
}
.switch .track::after{
  content:"";position:absolute;top:3px;right:3px;width:19px;height:19px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .22s var(--ease);
}
.switch input:checked + .track{ background:var(--brand); }
.switch input:checked + .track::after{ transform:translateX(-19px); }
.switch .switch-label{ font-size:.88rem; }

/* گزینه‌های کارتی (انتخاب خدمت/متخصص) */
.option-grid{ display:grid; gap:.75rem; }
.option{
  display:flex;align-items:center;gap:.85rem;
  padding:.9rem 1rem;
  border:1.5px solid var(--line);
  border-radius:var(--r-lg);
  background:var(--bg-elev);
  cursor:pointer;
  text-align:start;
  width:100%;
  font-family:inherit;font-size:.92rem;color:var(--ink);
  transition:all .18s var(--ease);
}
html[data-theme="dark"] .option{ background:var(--surface-2); }
.option:hover{ border-color:var(--brand); transform:translateY(-1px); box-shadow:var(--sh-2); }
.option.selected{ border-color:var(--brand); background:var(--brand-soft); box-shadow:0 0 0 3px var(--brand-ring); }
.option .option-title{ font-weight:700; }
.option .option-meta{ font-size:.78rem; color:var(--ink-3); }
.option .option-price{ margin-inline-start:auto; font-weight:800; color:var(--brand-700); white-space:nowrap; }
html[data-theme="dark"] .option .option-price{ color:var(--brand); }

/* ---------------------------------------------------------------- نشان‌ها */
.badge{
  display:inline-flex;align-items:center;gap:.3rem;
  font-size:.74rem;font-weight:700;
  padding:.22rem .6rem;border-radius:var(--r-full);
  background:var(--bg-sunken);color:var(--ink-2);
  white-space:nowrap;
}
.badge-brand{ background:var(--brand-soft); color:var(--brand-700); }
html[data-theme="dark"] .badge-brand{ color:var(--brand); }
.badge-ok{ background:var(--ok-soft); color:var(--ok); }
.badge-warn{ background:var(--warn-soft); color:#B45309; }
html[data-theme="dark"] .badge-warn{ color:var(--warn); }
.badge-err{ background:var(--err-soft); color:var(--err); }
.badge-info{ background:var(--info-soft); color:var(--info); }
.badge-dot::before{ content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none; }

.avatar{
  width:40px;height:40px;border-radius:50%;flex:none;
  background:var(--brand-soft);color:var(--brand-700);
  display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:.88rem;overflow:hidden;
}
.avatar img{width:100%;height:100%;object-fit:cover;}
.avatar-lg{width:56px;height:56px;font-size:1.1rem;}
.avatar-sm{width:32px;height:32px;font-size:.75rem;}
html[data-theme="dark"] .avatar{ color:var(--brand); }

/* ---------------------------------------------------------------- جدول */
.table-wrap{ overflow-x:auto; border-radius:var(--r-lg); border:1px solid var(--line); }
table.table{ width:100%; border-collapse:collapse; font-size:.88rem; background:var(--bg-elev); min-width:640px; }
html[data-theme="dark"] table.table{ background:var(--surface-2); }
.table thead th{
  text-align:start;font-weight:700;font-size:.78rem;color:var(--ink-3);
  padding:.8rem 1rem;background:var(--bg-sunken);white-space:nowrap;
  border-bottom:1px solid var(--line);
}
.table tbody td{ padding:.85rem 1rem; border-bottom:1px solid var(--line); vertical-align:middle; }
.table tbody tr:last-child td{ border-bottom:0; }
.table tbody tr{ transition:background .15s; }
.table tbody tr:hover{ background:var(--bg-sunken); }
.table .num{ font-variant-numeric:tabular-nums; direction:ltr; text-align:right; }

/* ---------------------------------------------------------------- هشدار */
.alert{
  display:flex;gap:.7rem;align-items:flex-start;
  padding:.85rem 1rem;border-radius:var(--r);
  font-size:.86rem;border:1px solid transparent;
  margin-bottom:1rem;
}
.alert svg{width:19px;height:19px;flex:none;margin-top:.15rem;}
.alert-err{ background:var(--err-soft); border-color:rgba(239,68,68,.25); color:var(--err); }
.alert-ok{ background:var(--ok-soft); border-color:rgba(16,185,129,.25); color:var(--ok); }
.alert-warn{ background:var(--warn-soft); border-color:rgba(245,158,11,.3); color:#B45309; }
html[data-theme="dark"] .alert-warn{ color:var(--warn); }
.alert-info{ background:var(--info-soft); border-color:rgba(59,130,246,.25); color:var(--info); }

/* ---------------------------------------------------------------- Toast */
/* مرکز افقی باید فیزیکی (left) باشد: inset-inline-start در صفحه‌ی راست‌به‌چپ یعنی right:50% و
   همراه translateX(-50%) پیام را روی گوشی کاملاً بیرون از صفحه می‌برد (پیام خطا دیده نمی‌شد). */
#toastHost{
  position:fixed; inset-block-start:calc(.75rem + env(safe-area-inset-top,0px)); left:50%; right:auto; transform:translateX(-50%);
  z-index:9000; display:flex; flex-direction:column; gap:.6rem; align-items:center;
  pointer-events:none; width:min(420px,calc(100% - 2rem));
}
.toast{
  pointer-events:auto;width:100%;
  display:flex;gap:.65rem;align-items:flex-start;
  background:var(--bg-elev);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--sh-3);
  padding:.8rem 1rem;font-size:.87rem;
  animation:toastIn .3s var(--ease);
}
html[data-theme="dark"] .toast{ background:#20202C; }
.toast svg{width:19px;height:19px;flex:none;margin-top:.15rem;}
.toast.ok svg{color:var(--ok);} .toast.err svg{color:var(--err);}
.toast.warn svg{color:var(--warn);} .toast.info svg{color:var(--info);}
.toast.leaving{ animation:toastOut .25s var(--ease) forwards; }
@keyframes toastIn{from{opacity:0;transform:translateY(-14px) scale(.97);}to{opacity:1;transform:none;}}
@keyframes toastOut{to{opacity:0;transform:translateY(-10px) scale(.97);}}

/* ---------------------------------------------------------------- Modal */
.modal-backdrop{
  position:fixed;inset:0;background:rgba(12,12,22,.55);backdrop-filter:blur(4px);
  z-index:8000;display:flex;align-items:center;justify-content:center;padding:1.2rem;
  animation:fadeIn .2s var(--ease);
}
.modal{
  background:var(--bg-elev);border:1px solid var(--line);
  border-radius:var(--r-xl);box-shadow:var(--sh-3);
  width:min(560px,100%);max-height:88vh;overflow-y:auto;
  animation:modalIn .28s var(--ease);
}
html[data-theme="dark"] .modal{ background:#1A1A24; }
.modal-lg{ width:min(820px,100%); }
.modal-head{
  display:flex;align-items:center;justify-content:space-between;gap:1rem;
  padding:1.2rem 1.4rem;border-bottom:1px solid var(--line);position:sticky;top:0;
  background:inherit;border-radius:var(--r-xl) var(--r-xl) 0 0;z-index:1;
}
.modal-head h3{margin:0;font-size:1.05rem;}
.modal-body{ padding:1.4rem; }
.modal-foot{
  padding:1rem 1.4rem;border-top:1px solid var(--line);
  display:flex;gap:.7rem;justify-content:flex-start;flex-wrap:wrap;
  position:sticky;bottom:0;background:inherit;
}
.modal-foot .btn{ flex:1 1 auto; }
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes modalIn{from{opacity:0;transform:translateY(18px) scale(.97);}to{opacity:1;transform:none;}}

/* پنجره‌ها روی موبایل به‌صورت «شیت» از پایین باز می‌شوند: تمام‌عرض، بدون فاصله‌ی هدررفته،
   با احترام به نوار پایینی گوشی (safe-area) و بدون اسکرولِ صفحه‌ی پشت. */
body.modal-open{ overflow:hidden; }

@media (max-width:640px){
  .modal-backdrop{ padding:0;align-items:flex-end; }
  .modal,.modal-lg{
    width:100%;max-width:100%;
    max-height:92dvh;
    border-radius:var(--r-xl) var(--r-xl) 0 0;
    animation:sheetIn .28s var(--ease);
    padding-bottom:env(safe-area-inset-bottom,0);
  }
  .modal-head{ border-radius:var(--r-xl) var(--r-xl) 0 0;padding:1rem 1.1rem; }
  .modal-body{ padding:1.1rem; }
  .modal-foot{ padding:.85rem 1.1rem; }
  @keyframes sheetIn{ from{opacity:0;transform:translateY(28px);} to{opacity:1;transform:none;} }
}

/* ---------------------------------------------------------------- حالت خالی/بارگذاری */
.empty{ text-align:center; padding:3rem 1.5rem; color:var(--ink-3); }
.empty .empty-ico{
  width:64px;height:64px;margin:0 auto 1rem;border-radius:var(--r-xl);
  background:var(--bg-sunken);display:flex;align-items:center;justify-content:center;color:var(--ink-3);
}
.empty .empty-ico svg{width:30px;height:30px;}
.empty h4{ color:var(--ink-2); margin-bottom:.35rem; }
.empty p{ font-size:.86rem; margin-bottom:1.2rem; }

.skeleton{
  background:linear-gradient(90deg,var(--bg-sunken) 25%,var(--line) 37%,var(--bg-sunken) 63%);
  background-size:400% 100%;animation:shimmer 1.3s ease-in-out infinite;
  border-radius:var(--r-sm);
}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:0 0}}
.skeleton-row{ height:16px; margin-bottom:.6rem; }

.spinner{
  width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--brand);
  border-radius:50%;animation:spin .7s linear infinite;margin:2.2rem auto;
}

/* ---------------------------------------------------------------- نوار بالا (عمومی) */
.topbar{
  position:sticky;top:0;z-index:500;
  background:color-mix(in srgb,var(--bg-elev) 88%,transparent);
  backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid var(--line);
}
.topbar-inner{ display:flex;align-items:center;gap:1rem;height:var(--header-h);min-width:0; }
.topbar-inner > .row{ flex:none; }
.brand{ display:flex;align-items:center;gap:.65rem;font-weight:800;color:var(--ink);min-width:0; }
.brand:hover{color:var(--ink);}
.brand-mark{
  width:38px;height:38px;border-radius:11px;flex:none;
  background:linear-gradient(135deg,var(--brand),#EC4899);
  display:flex;align-items:center;justify-content:center;color:#fff;
  box-shadow:var(--sh-brand);
}
.brand-mark svg{width:21px;height:21px;}
/* وقتی کسب‌وکار لوگو دارد، به‌جای گرادیان و آیکون، خودِ لوگو نمایش داده می‌شود.
   پس‌زمینه سفید است تا لوگوهای شفاف (PNG) روی گرادیان بنفش ناخوانا نشوند. */
.brand-mark.has-logo{ background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.12);overflow:hidden;padding:0; }
.brand-mark.has-logo img{ width:100%;height:100%;object-fit:cover;display:block; }
.brand-text{ line-height:1.25;min-width:0; }
.brand-text b{ display:block;font-size:1.02rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.brand-text span{
  display:block;font-size:.68rem;color:var(--ink-3);font-weight:500;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* روی گوشی، عنوان فرعیِ زیر نام برند و فاصله‌های بزرگ باعث سرریز افقی نوار بالا می‌شدند
   (نوار شامل برند + دکمه‌ی تم + یک/دو دکمه‌ی ورود و ثبت‌نام است). */
@media (max-width:560px){
  .topbar-inner{ gap:.5rem; }
  .brand{ gap:.5rem; }
  .brand-text span{ display:none; }
  .brand-mark{ width:34px;height:34px;border-radius:10px; }
  .brand-mark svg{ width:19px;height:19px; }
}
@media (max-width:380px){
  .brand-text b{ font-size:.94rem; }
  .topbar-inner .btn-sm{ padding:.4rem .6rem;font-size:.78rem; }
}

.nav-links{ display:flex;align-items:center;gap:.3rem;margin-inline-start:1.5rem; }
.nav-links a{
  padding:.45rem .8rem;border-radius:var(--r);font-size:.88rem;font-weight:600;color:var(--ink-2);
  transition:all .15s var(--ease);
}
.nav-links a:hover{ background:var(--bg-sunken); color:var(--ink); }
@media (max-width:900px){ .nav-links{display:none;} }

.theme-toggle{
  width:38px;height:38px;border-radius:var(--r);border:1px solid var(--line-strong);
  background:transparent;color:var(--ink-2);cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:all .18s var(--ease);
}
.theme-toggle:hover{ background:var(--bg-sunken);color:var(--ink); }
.theme-toggle svg{width:18px;height:18px;}
html[data-theme="dark"] .icon-sun{display:block;}
html[data-theme="dark"] .icon-moon{display:none;}
.icon-sun{display:none;} .icon-moon{display:block;}

/* ---------------------------------------------------------------- پنل مدیریت */
.app-shell{ display:flex; min-height:100vh; min-height:100dvh; }

.sidebar{
  width:var(--sidebar-w);flex:none;
  background:var(--bg-elev);
  border-inline-end:1px solid var(--line);
  display:flex;flex-direction:column;
  position:sticky;top:0;
  height:100vh;height:100dvh;
  z-index:600;
}
html[data-theme="dark"] .sidebar{ background:#14141D; }
.sidebar-head{ padding:1.15rem 1.2rem; border-bottom:1px solid var(--line); }
.sidebar-nav{ flex:1;overflow-y:auto;overscroll-behavior:contain;padding:.9rem .75rem; }
.nav-group-title{
  font-size:.7rem;font-weight:700;color:var(--ink-3);
  padding:.9rem .7rem .4rem;letter-spacing:.03em;
}
.nav-item{
  display:flex;align-items:center;gap:.7rem;
  padding:.6rem .75rem;margin-bottom:.15rem;
  border-radius:var(--r);font-size:.89rem;font-weight:600;color:var(--ink-2);
  cursor:pointer;transition:all .15s var(--ease);border:0;background:none;
  width:100%;font-family:inherit;text-align:start;
}
.nav-item svg{ width:19px;height:19px;flex:none;opacity:.75; }
.nav-item:hover{ background:var(--bg-sunken);color:var(--ink); }
.nav-item.active{ background:var(--brand-soft);color:var(--brand-700); }
html[data-theme="dark"] .nav-item.active{ color:var(--brand); }
.nav-item.active svg{ opacity:1; }
.nav-item .nav-badge{
  margin-inline-start:auto;background:var(--err);color:#fff;
  font-size:.68rem;font-weight:800;padding:.05rem .4rem;border-radius:99px;min-width:19px;text-align:center;
}
.sidebar-foot{ padding:.9rem; border-top:1px solid var(--line); }

.app-main{ flex:1;min-width:0;display:flex;flex-direction:column; }
.app-header{
  height:var(--header-h);flex:none;
  display:flex;align-items:center;gap:1rem;
  padding:0 1.5rem;
  background:color-mix(in srgb,var(--bg-elev) 88%,transparent);
  backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:400;
}
.app-body{ padding:1.6rem; flex:1;min-width:0; }
@media (max-width:640px){ .app-body{ padding:1rem; } .app-header{padding:0 1rem;gap:.6rem;} }

.menu-btn{ display:none; }

/* کشوی موبایل.
   باگ نسخه‌ی قبل: کشو با inset-inline-end:0 چیده شده بود که در حالت RTL یعنی لبه‌ی «چپ»،
   ولی برای پنهان‌کردنش translateX(100%) اعمال می‌شد که آن را به راست می‌بُرد — یعنی
   به‌جای خارج‌شدن از صفحه، وسط صفحه روی محتوا می‌ماند.
   حالا کشو روی inset-inline-start (سمت راست در RTL، همان‌جایی که در دسکتاپ هست) قرار دارد
   و translateX(100%) واقعاً آن را از صفحه بیرون می‌بَرد. */
@media (max-width:1000px){
  .sidebar{
    position:fixed;inset-block:0;inset-inline-start:0;inset-inline-end:auto;
    width:min(var(--sidebar-w),86vw);
    height:100vh;height:100dvh;
    border-inline-end:0;
    transform:translateX(100%);transition:transform .28s var(--ease);
    box-shadow:var(--sh-3);
    visibility:hidden;
  }
  .sidebar.open{ transform:none;visibility:visible; }
  .menu-btn{ display:flex; }
  .sidebar-scrim{
    position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:550;animation:fadeIn .2s;
    backdrop-filter:blur(2px);
  }
  /* وقتی کشو باز است، صفحه‌ی پشت آن نباید اسکرول شود */
  body.drawer-open{ overflow:hidden; }
}

/* در چیدمان LTR (اگر روزی لازم شد) کشو از سمت چپ می‌آید */
@media (max-width:1000px){
  html[dir="ltr"] .sidebar{ transform:translateX(-100%); }
  html[dir="ltr"] .sidebar.open{ transform:none; }
}

/* ---------------------------------------------------------------- KPI */
.kpi{
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:1.15rem 1.25rem;position:relative;overflow:hidden;
  transition:transform .2s var(--ease),box-shadow .2s var(--ease);
}
html[data-theme="dark"] .kpi{ background:var(--surface-2); }
.kpi:hover{ transform:translateY(-2px); box-shadow:var(--sh-2); }
.kpi-top{ display:flex;align-items:center;justify-content:space-between;margin-bottom:.65rem; }
.kpi-label{ font-size:.8rem;color:var(--ink-3);font-weight:600; }
.kpi-ico{
  width:36px;height:36px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:var(--brand-soft);color:var(--brand-700);flex:none;
}
html[data-theme="dark"] .kpi-ico{ color:var(--brand); }
.kpi-ico svg{width:18px;height:18px;}
.kpi-ico.ok{ background:var(--ok-soft);color:var(--ok); }
.kpi-ico.warn{ background:var(--warn-soft);color:var(--warn); }
.kpi-ico.err{ background:var(--err-soft);color:var(--err); }
.kpi-ico.info{ background:var(--info-soft);color:var(--info); }
.kpi-value{ font-size:1.75rem;font-weight:800;line-height:1.2;font-variant-numeric:tabular-nums; }
.kpi-foot{ font-size:.76rem;color:var(--ink-3);margin-top:.25rem; }

/* ---------------------------------------------------------------- گام‌ها (Stepper) */
.stepper{ display:flex;align-items:center;gap:.35rem;margin-bottom:1.8rem;flex-wrap:wrap; }
.step{ display:flex;align-items:center;gap:.5rem;font-size:.82rem;color:var(--ink-3);font-weight:600; }
.step-dot{
  width:28px;height:28px;border-radius:50%;flex:none;
  display:flex;align-items:center;justify-content:center;
  background:var(--bg-sunken);color:var(--ink-3);font-size:.78rem;font-weight:800;
  border:1.5px solid var(--line-strong);transition:all .2s var(--ease);
}
.step.active .step-dot{ background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-ring); }
.step.active{ color:var(--ink); }
.step.done .step-dot{ background:var(--ok);border-color:var(--ok);color:#fff; }
.step.done{ color:var(--ink-2); }
.step-line{ width:26px;height:2px;background:var(--line-strong);border-radius:2px; }
@media (max-width:640px){ .step span.step-text{display:none;} .step-line{width:14px;} }

/* ---------------------------------------------------------------- تقویم شمسی
   نکته‌ی مهم: عدد روز و نقطه‌ی «ظرفیت خالی» هرکدام ردیف مستقل خودشان را دارند
   (grid-template-rows) و نقطه دیگر با position:absolute روی عدد نمی‌افتد.
   قبلاً در عرض‌های کوچک، نقطه و عدد روی هم می‌افتادند. */
.cal{
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:1rem;container-type:inline-size;
}
html[data-theme="dark"] .cal{ background:var(--surface-2); }
.cal-head{ display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.8rem; }
.cal-title{ font-weight:800;font-size:.98rem;white-space:nowrap; }
.cal-nav{
  width:34px;height:34px;flex:none;border-radius:var(--r-sm);border:1px solid var(--line-strong);
  background:transparent;color:var(--ink-2);cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:all .15s;
}
.cal-nav:hover:not(:disabled){ background:var(--bg-sunken);color:var(--ink); }
.cal-nav:disabled{ opacity:.35;cursor:not-allowed; }
.cal-nav svg{width:16px;height:16px;}

.cal-grid{ display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.28rem; }
.cal-dow{
  text-align:center;font-size:.72rem;color:var(--ink-3);font-weight:700;
  padding:.3rem 0 .45rem;line-height:1;
}
.cal-day{
  display:grid;grid-template-rows:1fr 8px;place-items:center;
  min-height:40px;aspect-ratio:1/1;padding:0;
  border-radius:var(--r);border:1px solid transparent;background:transparent;
  font-family:inherit;font-size:.88rem;font-weight:600;color:var(--ink);cursor:pointer;
  line-height:1;overflow:hidden;
  transition:background .15s var(--ease),color .15s var(--ease),border-color .15s var(--ease);
}
.cal-day > .cal-num{ grid-row:1;align-self:end;padding-bottom:2px;font-variant-numeric:tabular-nums; }
.cal-day > .cal-dot{ grid-row:2;width:5px;height:5px;border-radius:50%;background:transparent; }
.cal-day:hover:not(:disabled){ background:var(--bg-sunken); }
.cal-day:disabled{ color:var(--ink-3);opacity:.4;cursor:not-allowed; }
.cal-day.has-slots > .cal-dot{ background:var(--ok); }
.cal-day.selected{ background:var(--brand);color:#fff;box-shadow:0 0 0 3px var(--brand-ring); }
.cal-day.selected.has-slots > .cal-dot{ background:#fff; }
.cal-day.today{ border-color:var(--brand); }
.cal-day.empty{ visibility:hidden; }
.cal-legend{
  font-size:.74rem;color:var(--ink-3);margin-top:.75rem;
  display:flex;gap:.4rem;align-items:center;
}
.cal-legend i{ width:6px;height:6px;border-radius:50%;background:var(--ok);display:inline-block;flex:none; }

/* در ستون‌های باریک، تقویم فشرده‌تر می‌شود بدون اینکه چیزی روی هم بیفتد */
@container (max-width: 330px){
  .cal-day{ min-height:34px;font-size:.8rem;grid-template-rows:1fr 7px; }
  .cal-grid{ gap:.18rem; }
  .cal-dow{ font-size:.66rem; }
}

.slot-grid{ display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:.5rem; }
.slot{
  padding:.65rem .3rem;border-radius:var(--r);border:1.5px solid var(--line);
  background:var(--bg-elev);color:var(--ink);font-family:inherit;font-size:.88rem;font-weight:700;
  cursor:pointer;transition:all .15s var(--ease);font-variant-numeric:tabular-nums;
  min-height:44px;   /* هدف لمسی استاندارد موبایل */
}
html[data-theme="dark"] .slot{ background:var(--surface-2); }
.slot:hover{ border-color:var(--brand);transform:translateY(-1px); }
.slot.selected{ background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:var(--sh-brand); }

/* چیدمان گام «انتخاب روز و ساعت»: در دسکتاپ دو ستون، در موبایل زیر هم.
   قبلاً از grid-2 عمومی استفاده می‌شد که در عرض‌های میانی ستون تقویم را
   بیش از حد باریک می‌کرد و باعث درهم‌ریختگی می‌شد. */
.book-time{ display:grid;grid-template-columns:minmax(280px,1fr) 1fr;gap:1.25rem;align-items:start; }
.book-time .slot-panel{ min-width:0; }
@media (max-width:820px){
  .book-time{ grid-template-columns:1fr;gap:1rem; }
}

/* ---------------------------------------------------------------- امتیاز */
.stars{ display:inline-flex;gap:.15rem;direction:ltr; }
.stars svg{ width:17px;height:17px;color:var(--line-strong); }
.stars svg.on,.star-btn svg.on{ color:#F59E0B; fill:#F59E0B; }
.star-btn{ background:none;border:0;padding:.1rem;cursor:pointer;line-height:0; }
.star-btn svg{ width:30px;height:30px;transition:transform .12s var(--ease); }
.star-btn:hover svg{ transform:scale(1.15); }

/* ---------------------------------------------------------------- خط پیشرفت */
.meter{ height:7px;border-radius:99px;background:var(--bg-sunken);overflow:hidden; }
.meter > i{ display:block;height:100%;border-radius:99px;background:var(--brand);transition:width .5s var(--ease); }
.meter.warn > i{ background:var(--warn); }
.meter.err > i{ background:var(--err); }

/* ---------------------------------------------------------------- تب */
.tabs{ display:flex;gap:.25rem;border-bottom:1px solid var(--line);margin-bottom:1.4rem;overflow-x:auto;overflow-y:hidden;
  scrollbar-width:none;-webkit-overflow-scrolling:touch; }
.tabs::-webkit-scrollbar{ display:none; }
.tab{
  padding:.65rem 1rem;border:0;background:none;cursor:pointer;font-family:inherit;
  font-size:.89rem;font-weight:700;color:var(--ink-3);border-bottom:2px solid transparent;
  white-space:nowrap;transition:all .15s var(--ease);margin-bottom:-1px;
}
.tab:hover{ color:var(--ink-2); }
.tab.active{ color:var(--brand-700);border-bottom-color:var(--brand); }
html[data-theme="dark"] .tab.active{ color:var(--brand); }

/* ---------------------------------------------------------------- صفحه‌ی فرود */
.hero{
  position:relative;overflow:hidden;
  padding:5rem 0 4.5rem;
  background:
    radial-gradient(1000px 400px at 85% -10%,rgba(124,58,237,.16),transparent 60%),
    radial-gradient(800px 380px at 10% 0%,rgba(236,72,153,.12),transparent 60%);
}
.hero h1{ font-size:clamp(1.9rem,4.4vw,3.1rem);line-height:1.35;margin-bottom:1.1rem; }
.hero .lead{ font-size:clamp(.98rem,1.6vw,1.15rem);color:var(--ink-2);max-width:600px;margin-bottom:1.9rem; }
.hero-pill{
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.35rem .9rem;border-radius:99px;
  background:var(--brand-soft);color:var(--brand-700);
  font-size:.8rem;font-weight:700;margin-bottom:1.4rem;
}
html[data-theme="dark"] .hero-pill{ color:var(--brand); }
.gradient-text{
  background:linear-gradient(120deg,var(--brand),#EC4899 60%,#F59E0B);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}

.feature{ padding:1.5rem; }
.feature-ico{
  width:46px;height:46px;border-radius:14px;margin-bottom:.9rem;
  background:var(--brand-soft);color:var(--brand-700);
  display:flex;align-items:center;justify-content:center;
}
html[data-theme="dark"] .feature-ico{ color:var(--brand); }
.feature-ico svg{ width:23px;height:23px; }
.feature h4{ margin-bottom:.4rem; }
.feature h3{ font-size:1rem;margin-bottom:.4rem; }
.faq-q{ display:flex;gap:.5rem;align-items:flex-start;font-size:1rem; }
.faq-q > span{ color:var(--brand);flex:none;margin-top:.15rem;display:flex; }
.faq-a{ font-size:.87rem;color:var(--ink-2);margin:0; }
.feature p{ font-size:.87rem;color:var(--ink-2);margin:0; }

/* قیف تبدیل در آمار بازدید (۲.۱۰) */
.funnel{ display:flex;flex-direction:column;gap:.75rem; }
.funnel-step{ display:flex;flex-direction:column;gap:.3rem;font-size:.86rem; }
.funnel-bar{ height:8px;border-radius:99px;background:var(--bg-sunken);overflow:hidden; }
.funnel-bar i{ display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--brand),#EC4899); }

/* گروه‌های امکانات در صفحه‌ی اصلی (۲.۹) */
.feature-list{ list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem; }
.feature-list li{ font-size:.87rem;color:var(--ink-2);line-height:1.8;padding-inline-start:1rem;position:relative; }
.feature-list li::before{ content:"";position:absolute;inset-inline-start:0;top:.7em;width:6px;height:6px;
  border-radius:50%;background:var(--brand); }
.feature-list b{ color:var(--ink); }

/* کارت پیش‌نمایش قهرمان که حالا لینکِ صفحه‌ی نمایشی است */
.hero-preview{ display:block;color:inherit;text-decoration:none;transition:transform .18s,box-shadow .18s;box-shadow:var(--sh-3); }
.hero-preview:hover{ transform:translateY(-3px); }

.plan{ display:flex;flex-direction:column;height:100%;position:relative; }
.plan.popular{ border-color:var(--brand);box-shadow:var(--sh-brand); }
.plan-tag{
  position:absolute;top:-11px;left:50%;transform:translateX(-50%);
  background:var(--brand);color:#fff;font-size:.72rem;font-weight:800;
  padding:.22rem .8rem;border-radius:99px;white-space:nowrap;
}
.plan-price{ font-size:2rem;font-weight:800;color:var(--brand-700);margin:.5rem 0 .1rem;font-variant-numeric:tabular-nums; }
html[data-theme="dark"] .plan-price{ color:var(--brand); }
.plan-price small{ font-size:.8rem;font-weight:600;color:var(--ink-3); }
.plan ul{ list-style:none;padding:0;margin:1.2rem 0;font-size:.86rem;flex:1; }
.plan ul li{ display:flex;gap:.5rem;align-items:flex-start;padding:.32rem 0;color:var(--ink-2); }
.plan ul li svg{ width:17px;height:17px;flex:none;margin-top:.22rem;color:var(--ok); }
.plan ul li.off{ color:var(--ink-3); }
.plan ul li.off svg{ color:var(--line-strong); }

.footer{ border-top:1px solid var(--line);padding:2.5rem 0;color:var(--ink-3);font-size:.85rem;margin-top:4rem; }

/* ---------------------------------------------------------------- نماد اعتماد درگاه پرداخت
   آقای پرداخت دو نسخه‌ی لوگو دارد: یکی برای پس‌زمینه‌ی روشن و یکی برای تیره.
   هر دو در HTML قرار می‌گیرند و بر اساس تم فعال یکی نمایش داده می‌شود. */
.trust-badge{ display:inline-flex;align-items:center;flex:0 0 auto; }
.trust-badge img{ height:58px;width:auto;display:block;border-radius:0; }
.trust-badge .trust-dark{ display:none; }
html[data-theme="dark"] .trust-badge .trust-light{ display:none; }
html[data-theme="dark"] .trust-badge .trust-dark{ display:block; }

/* هر دو نماد (ای‌نماد + درگاه) کنار هم */
.trust-badges{ display:flex;align-items:center;gap:.75rem;flex-wrap:wrap; }

/* ای‌نماد لوگویش را با اندازه‌ی خودش می‌دهد؛ هم‌قد نماد درگاه می‌شود.
   پس‌زمینه‌ی روشن دارد و در تم تیره بدون بستر سفید محو می‌شود، پس
   یک بستر سفید با گوشه‌ی نرم زیرش گذاشته می‌شود. */
.enamad-badge img{ height:58px;width:auto;display:block; }
html[data-theme="dark"] .enamad-badge{
  background:#fff;border-radius:8px;padding:3px;
}

/* ---------------------------------------------------------------- صفحه‌ی رزرو عمومی */
.book-cover{
  height:170px;border-radius:var(--r-xl);
  background:linear-gradient(135deg,var(--brand),#EC4899);
  background-size:cover;background-position:center;position:relative;
}
.book-head{ margin-top:-52px;padding:0 1.5rem;position:relative;z-index:1; }
/* در دسکتاپ لوگو و نام کنار هم و هم‌ترازِ پایین قرار می‌گیرند */
.book-head-row{ align-items:flex-end; }
.book-logo{
  width:96px;height:96px;border-radius:26px;border:4px solid var(--bg);flex:none;
  background:var(--bg-elev);display:flex;align-items:center;justify-content:center;
  font-size:2rem;font-weight:800;color:var(--brand);overflow:hidden;box-shadow:var(--sh-2);
}
.book-logo img{width:100%;height:100%;object-fit:cover;}

/* ---------------------------------------------------------------- QR */
.qr-box{
  display:flex;align-items:center;justify-content:center;
  padding:1.4rem;background:#fff;border-radius:var(--r-lg);
  border:1px solid var(--line);width:fit-content;margin-inline:auto;
}
.qr-box canvas,.qr-box img{ display:block; }

.copy-field{
  display:flex;align-items:stretch;gap:.5rem;
  background:var(--bg-sunken);border:1px solid var(--line-strong);
  border-radius:var(--r);padding:.35rem .35rem .35rem .9rem;
}
.copy-field input{
  flex:1;min-width:0;border:0;background:transparent;color:var(--ink);
  font-family:inherit;font-size:.85rem;direction:ltr;text-align:left;outline:none;
}

/* ================================================================
   آپلود تصویر
   ================================================================ */
.uploader{
  display:flex;align-items:center;gap:1rem;
  border:1.5px dashed var(--line-strong);border-radius:var(--r-lg);
  padding:.85rem;background:var(--bg-sunken);
  transition:border-color .18s var(--ease),background .18s var(--ease);
}
.uploader.dragover{ border-color:var(--brand);background:var(--brand-soft); }
.uploader.is-busy{ opacity:.7;pointer-events:none; }

.uploader-preview{
  width:78px;height:78px;flex:none;border-radius:var(--r);overflow:hidden;
  background:var(--bg-elev);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;color:var(--ink-3);
}
.uploader-preview img{ width:100%;height:100%;object-fit:cover; }
.uploader-preview svg{ width:26px;height:26px; }
.uploader.wide .uploader-preview{ width:150px;height:66px; }

.uploader-body{ flex:1;min-width:0; }
.uploader-title{ font-size:.86rem;font-weight:700;margin-bottom:.2rem; }
.uploader-hint{ font-size:.75rem;color:var(--ink-3);line-height:1.7; }
.uploader-actions{ display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.55rem; }
.uploader input[type="file"]{ display:none; }

.uploader-bar{
  height:4px;border-radius:99px;background:var(--line);overflow:hidden;margin-top:.5rem;display:none;
}
.uploader.is-busy .uploader-bar{ display:block; }
.uploader-bar span{
  display:block;height:100%;width:35%;border-radius:99px;background:var(--brand);
  animation:uploaderSlide 1.1s var(--ease) infinite;
}
@keyframes uploaderSlide{
  0%{ transform:translateX(120%);} 100%{ transform:translateX(-320%);}
}
.uploader-error{ font-size:.76rem;color:var(--err);margin-top:.4rem;display:none; }
.uploader.has-error .uploader-error{ display:block; }

@media (max-width:520px){
  .uploader{ flex-direction:column;align-items:stretch;text-align:center; }
  .uploader-preview{ width:100%;height:120px; }
  .uploader.wide .uploader-preview{ width:100%;height:110px; }
  .uploader-actions{ justify-content:center; }
}

/* ================================================================
   لایه‌ی واکنش‌گرا (موبایل)
   این بخش عمداً در انتهای فایل است تا بر قواعد بالا اولویت داشته باشد.
   ================================================================ */
@media (max-width:768px){
  /* فاصله‌های داخلی کارت‌ها روی موبایل بیش از حد بزرگ بودند */
  .card{ padding:1.05rem; }
  .card-pad-lg{ padding:1.15rem; }
  .container,.container-sm{ width:min(100%,calc(100% - 1.6rem)); }

  h1{font-size:1.45rem;} h2{font-size:1.22rem;} h3{font-size:1.05rem;}
  .section-title{ font-size:1rem; }

  /* هدر صفحه‌ی رزرو.
     روی گوشی، لوگو و متن نمی‌توانند کنار هم بمانند: لوگوی کوچک‌ترِ موبایل آن‌قدر پایین‌تر
     از کاور نمی‌آید که ردیفِ align-items:flex-end متن را زیر کاور ببرد، در نتیجه نام و
     شعار کسب‌وکار روی خودِ تصویر کاور می‌افتادند و با کاورهای روشن ناخوانا می‌شدند.
     پس روی موبایل لوگو بالا و متن زیر آن قرار می‌گیرد. */
  .book-cover{ height:120px;border-radius:var(--r-lg); }
  .book-head{ margin-top:-38px;padding:0 .9rem; }
  .book-logo{ width:70px;height:70px;border-radius:20px;border-width:3px;font-size:1.4rem;flex:none; }
  /* فقط ردیف «لوگو + نام» ستونی می‌شود، نه ردیف اطلاعات تماس که بعد از آن می‌آید */
  .book-head-row{ flex-direction:column;align-items:flex-start;gap:.6rem; }
  .book-head-row > .grow{ padding-bottom:0;width:100%; }
  .book-head h1{ font-size:1.3rem;margin-bottom:.2rem; }

  /* دکمه‌ها روی موبایل تمام‌عرض و با هدف لمسی مناسب */
  .btn{ min-height:42px; }
  .btn-lg{ padding:.8rem 1.2rem;font-size:.95rem; }
  .row.gap-2.wrap > .btn{ flex:1 1 auto; }

  /* فرم‌ها هرگز دو ستونی نمانند */
  .grid-2,.grid-3,.grid-4{ grid-template-columns:1fr; }
  .grid{ gap:.85rem; }

  /* جدول‌ها: اسکرول افقی روان به‌جای شکستن چیدمان */
  .table-wrap{ -webkit-overflow-scrolling:touch; }
  table.table{ font-size:.82rem;min-width:560px; }
  .table thead th,.table tbody td{ padding:.65rem .7rem; }

  .tabs{ gap:.15rem;margin-bottom:1rem; }
  .tab{ white-space:nowrap; }

  .kpi{ padding:.95rem 1rem; }
  .kpi-value{ font-size:1.4rem; }

  .copy-field{ flex-wrap:wrap; }
  .copy-field input{ flex:1 1 100%;padding:.3rem 0; }
}

@media (max-width:420px){
  .container,.container-sm,.container-xs{ width:min(100%,calc(100% - 1.1rem)); }
  .card,.card-pad-lg{ padding:.9rem; }
  .cal{ padding:.7rem; }
  .stepper{ gap:.25rem;margin-bottom:1.2rem; }
  .step-dot{ width:26px;height:26px;font-size:.72rem; }
  .step-line{ width:10px; }
  .slot-grid{ grid-template-columns:repeat(auto-fill,minmax(68px,1fr));gap:.4rem; }
  .option{ padding:.75rem .8rem;gap:.6rem;font-size:.88rem; }
  .book-logo{ width:60px;height:60px;border-radius:17px; }
  .book-head{ margin-top:-32px; }
}

/* روی صفحه‌های لمسی، افکت hover نباید «چسبنده» شود */
@media (hover:none){
  .option:hover,.slot:hover,.card.hoverable:hover,.kpi:hover{ transform:none;box-shadow:none; }
  .option:hover{ border-color:var(--line); }
  .slot:hover{ border-color:var(--line); }
}

/* جلوگیری از زوم خودکار سافاری روی فوکوس ورودی‌ها (فونت کمتر از ۱۶px) */
@media (max-width:768px){
  .input,.select,.textarea{ font-size:16px; }
}

/* ================================================================
   نوارِ فیلتر و ابزار (بالای فهرست‌ها)
   قبلاً عرض هر Select/Input با style درون‌خطی ثابت شده بود (۱۵۰px، ۱۶۰px، ۱۹۰px، ۲۱۰px …)
   و روی گوشی مجموع آن‌ها از عرض صفحه بیشتر می‌شد و کارت را می‌شکست.
   ================================================================ */
.toolbar{ display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap; }
.toolbar-group{ display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;min-width:0; }
.toolbar-group.grow{ flex:1 1 260px; }
.toolbar .field-sm{ flex:1 1 150px;min-width:0;max-width:220px; }
.toolbar .field-sm.wide{ flex:1 1 190px;max-width:260px; }

@media (max-width:640px){
  .toolbar{ gap:.6rem; }
  .toolbar-group{ width:100%; }
  .toolbar .field-sm,.toolbar .field-sm.wide{ flex:1 1 100%;max-width:none; }
  .toolbar .btn{ flex:1 1 auto; }
}

/* ناوبری روز در فهرست نوبت‌ها */
.day-nav{ display:flex;align-items:center;gap:.4rem;min-width:0; }
.day-nav .day-label{ flex:1 1 auto;min-width:0;text-align:center; }
.day-nav .day-label b{ display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
@media (min-width:641px){ .day-nav .day-label{ min-width:190px; } }

/* ورودی تاریخ شمسی (روز / ماه / سال) */
.jdate{ display:flex;gap:.35rem;min-width:0; }
.jdate .jd-day{ flex:0 1 76px;min-width:60px; }
.jdate .jd-month{ flex:1 1 110px;min-width:92px; }
.jdate .jd-year{ flex:0 1 92px;min-width:74px; }

/* ویرایشگر ساعات کاری هفتگی — چهار ورودی زمان کنار هم روی گوشی جا نمی‌شدند */
.week-row{
  display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;
  padding:.85rem 0;border-bottom:1px solid var(--line);
}
.week-row:last-child{ border-bottom:0; }
.week-day{ width:92px;flex:none;font-weight:700;font-size:.9rem; }
.week-times{ display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;min-width:0; }
.week-times .time-pair{ display:flex;align-items:center;gap:.35rem; }
.week-times .time-sep{ font-size:.8rem;color:var(--ink-3); }
.week-times input[type="time"]{ width:112px;min-width:104px; }

@media (max-width:640px){
  .week-row{ gap:.55rem; }
  .week-day{ width:auto;flex:1 1 auto;font-size:.95rem; }
  /* چهار ستون «برچسب | ساعت | برچسب | ساعت» تا برچسب بلندِ «استراحت از» ورودی را باریک نکند
     (پیش‌تر ساعت شروع استراحت روی گوشی بریده می‌شد). */
  .week-times{ width:100%;display:grid;grid-template-columns:auto minmax(0,1fr) auto minmax(0,1fr);gap:.45rem .4rem; }
  .week-times .time-pair{ display:contents; }
  .week-times input[type="time"]{ width:100%;min-width:0; }
  .week-times .time-sep{ white-space:nowrap; }
}

/* دکمه‌ها هرگز نباید از عرض ظرف خود بیرون بزنند */
.btn{ max-width:100%; }
.btn > span{ overflow:hidden;text-overflow:ellipsis; }

/* هدف لمسی و بازخورد ضربه روی گوشی */
@media (max-width:768px){
  .btn-sm{ min-height:38px; }
  .btn-icon{ min-width:38px; }
  .cal-nav,.theme-toggle{ min-width:38px;min-height:38px; }
  a,button{ -webkit-tap-highlight-color:rgba(124,58,237,.12); }
}

/* احترام به ناحیه‌های امن گوشی (نوار خانه‌ی آیفون) */
.app-body{ padding-bottom:calc(1.6rem + env(safe-area-inset-bottom,0)); }
@media (max-width:640px){ .app-body{ padding-bottom:calc(1rem + env(safe-area-inset-bottom,0)); } }

/* هیچ صفحه‌ای نباید اسکرول افقی داشته باشد.
   عمداً از overflow-x:clip استفاده می‌شود نه hidden — چون hidden روی html/body
   یک ظرف اسکرول می‌سازد و position:sticky نوار بالا و نوار کناری را از کار می‌اندازد. */
html{ overflow-x:clip; }
body{ overflow-x:clip;max-width:100%; }

/* ---------------------------------------------------------------- چاپ */
@media print{
  .sidebar,.app-header,.topbar,.no-print{ display:none !important; }
  body{ background:#fff; }
  .card{ box-shadow:none;border-color:#ddd;break-inside:avoid; }
}

/* ================================================================
   پنل ادمین پلتفرم
   ================================================================ */
/* رنگ متمایز پنل ادمین تا با پنل کسب‌وکار اشتباه نشود.
   کلاس روی body هم گذاشته می‌شود (admin.js) چون پنجره‌های Modal مستقیم به body اضافه
   می‌شوند و اگر متغیرها فقط روی .app-shell باشند، رنگ آن‌ها بنفشِ پنل کسب‌وکار می‌ماند. */
.admin-shell{ --brand:#0F766E; --brand-600:#0D9488; --brand-700:#115E59; --brand-soft:#ECFDF5; --brand-ring:rgba(13,148,136,.18); }
html[data-theme="dark"] .admin-shell{ --brand:#2DD4BF; --brand-600:#14B8A6; --brand-700:#0D9488; --brand-soft:#0C2C29; --brand-ring:rgba(45,212,191,.22); }

.admin-tag{
  display:inline-flex;align-items:center;gap:.3rem;
  font-size:.66rem;font-weight:800;letter-spacing:.02em;
  padding:.14rem .5rem;border-radius:99px;
  background:var(--brand);color:#fff;
}

/* فهرست‌هایی که روی گوشی به‌جای جدول، کارت می‌شوند */
.data-cards{ display:grid;gap:.7rem; }
.data-card{
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:.9rem 1rem;
}
html[data-theme="dark"] .data-card{ background:var(--surface-2); }
.data-card-head{ display:flex;align-items:flex-start;justify-content:space-between;gap:.6rem;margin-bottom:.5rem; }
.data-card-title{ font-weight:700;font-size:.94rem;min-width:0;overflow:hidden;text-overflow:ellipsis; }
.data-card-sub{ font-size:.74rem;color:var(--ink-3);direction:ltr;text-align:right; }
.data-card-rows{ display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.35rem .8rem; }
.data-card-rows > div{ display:flex;justify-content:space-between;gap:.4rem;font-size:.79rem; }
.data-card-rows dt,.data-card-rows .k{ color:var(--ink-3); }
.data-card-rows dd,.data-card-rows .v{ margin:0;font-weight:700; }
.data-card-actions{ display:flex;gap:.4rem;flex-wrap:wrap;margin-top:.75rem; }
.data-card-actions .btn{ flex:1 1 auto; }

/* روی دسکتاپ جدول نمایش داده می‌شود، روی موبایل کارت‌ها */
.only-cards{ display:none; }
@media (max-width:820px){
  .only-table{ display:none; }
  .only-cards{ display:grid; }
}

/* ردیف آماری فشرده برای داشبورد ادمین */
.stat-strip{ display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.7rem; }
.stat{
  background:var(--bg-sunken);border-radius:var(--r);padding:.7rem .85rem;
  border:1px solid var(--line);
}
.stat .stat-label{ font-size:.73rem;color:var(--ink-3);margin-bottom:.2rem; }
.stat .stat-value{ font-size:1.15rem;font-weight:800;font-variant-numeric:tabular-nums; }

/* ================================================================
   صفحات عمومی و محتوایی (صفحه‌ی اصلی، صنف‌ها، مجله، ۴۰۴)
   ================================================================ */
.hero-kicker{
  display:block;font-size:clamp(1rem,1.9vw,1.3rem);font-weight:800;color:var(--brand-700);
  margin-bottom:.35rem;letter-spacing:0;
}
html[data-theme="dark"] .hero-kicker{ color:var(--brand); }

.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; }

/* ---------- نوار مسیر (Breadcrumb) ---------- */
.breadcrumbs{ font-size:.8rem;color:var(--ink-3);margin-bottom:1rem; }
.breadcrumbs ol{ list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:.2rem .45rem; }
.breadcrumbs li{ display:flex;align-items:center;gap:.45rem; }
.breadcrumbs li + li::before{ content:"/";color:var(--line-strong); }
.breadcrumbs a{ color:var(--ink-2); }
.breadcrumbs [aria-current="page"]{ color:var(--ink-3); }

/* ---------- سربرگ صفحات محتوایی ---------- */
.page-hero{
  padding:2.6rem 0 2.4rem;
  background:
    radial-gradient(900px 340px at 85% -10%,rgba(124,58,237,.14),transparent 60%),
    radial-gradient(700px 320px at 10% 0%,rgba(236,72,153,.10),transparent 60%);
}
.page-hero h1{ font-size:clamp(1.65rem,3.6vw,2.55rem);line-height:1.45;margin-bottom:.9rem; }
.page-hero .lead{ font-size:clamp(.97rem,1.5vw,1.1rem);color:var(--ink-2);max-width:720px;margin-bottom:1.5rem; }
.page-hero .hero-actions{ display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1rem; }
.page-hero .hero-notes{ display:flex;flex-wrap:wrap;gap:.4rem 1.2rem;font-size:.82rem;color:var(--ink-3); }
.page-hero .hero-notes span{ display:inline-flex;align-items:center;gap:.35rem; }
.page-hero .hero-notes svg{ color:var(--ok);width:16px;height:16px; }

.section{ margin-top:3.4rem; }
.section-head{ text-align:center;max-width:700px;margin:0 auto 1.6rem; }
.section-head p{ color:var(--ink-2);margin:0; }

/* ---------- کارت‌های لینک (صنف‌ها و مقاله‌ها) ---------- */
.link-cards{ display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(250px,1fr)); }
.link-card{
  display:flex;flex-direction:column;gap:.35rem;height:100%;
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:1.15rem 1.2rem;color:var(--ink);box-shadow:var(--sh-1);
  transition:box-shadow .2s var(--ease),transform .2s var(--ease),border-color .2s var(--ease);
}
.link-card:hover{ color:var(--ink);box-shadow:var(--sh-2);transform:translateY(-2px);border-color:var(--brand-ring); }
.link-card .link-card-ico{
  width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:var(--brand-soft);color:var(--brand-700);margin-bottom:.35rem;
}
html[data-theme="dark"] .link-card .link-card-ico{ color:var(--brand); }
.link-card .link-card-ico svg{ width:21px;height:21px; }
.link-card b{ font-size:.98rem; }
.link-card p{ font-size:.84rem;color:var(--ink-2);margin:0;flex:1; }
.link-card .link-card-more{ font-size:.8rem;font-weight:700;color:var(--brand-600);margin-top:.35rem; }
.link-card .link-card-meta{ font-size:.75rem;color:var(--ink-3); }

/* ---------- فهرست تیک‌دار ---------- */
.check-list{ list-style:none;padding:0;margin:0 0 1rem; }
.check-list li{ position:relative;padding-inline-start:1.7rem;margin:.45rem 0;color:var(--ink-2); }
.check-list li::before{
  content:"";position:absolute;inset-inline-start:0;top:.5em;width:1.05rem;height:1.05rem;border-radius:50%;
  background:var(--ok-soft) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2310B981' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E") center/62% no-repeat;
}

/* ---------- نوار فراخوان ---------- */
.cta-band{
  border-radius:var(--r-xl);padding:2.2rem 1.6rem;text-align:center;color:#fff;
  background:linear-gradient(135deg,var(--brand),#EC4899);box-shadow:var(--sh-brand);
}
.cta-band h2{ color:#fff;margin-bottom:.5rem; }
.cta-band p{ color:rgba(255,255,255,.92);max-width:560px;margin:0 auto 1.2rem; }
.cta-band .btn-light{ background:#fff;color:#5B21B6;box-shadow:0 8px 24px rgba(0,0,0,.2); }
.cta-band .btn-light:hover{ background:#fff;color:#4C1D95; }
.cta-band .btn-outline-light{ --btn-bg:transparent;border:1px solid rgba(255,255,255,.7);color:#fff; }
.cta-band .btn-outline-light:hover{ background:rgba(255,255,255,.12);color:#fff; }

/* ---------- سؤالات متداول بازشونده ---------- */
.faq-list{ max-width:820px;margin-inline:auto; }
.faq-item{
  background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:0 1.15rem;margin-bottom:.65rem;box-shadow:var(--sh-1);
}
.faq-item summary{
  cursor:pointer;list-style:none;font-weight:700;padding:.95rem 0;
  display:flex;align-items:center;justify-content:space-between;gap:1rem;
}
.faq-item summary::-webkit-details-marker{ display:none; }
.faq-item summary::after{ content:"+";font-size:1.3rem;line-height:1;color:var(--brand);flex:none; }
.faq-item[open] summary::after{ content:"−"; }
.faq-item p{ margin:0;padding:0 0 1rem;color:var(--ink-2);font-size:.92rem; }

/* ---------- متن مقاله ---------- */
.article-layout{ display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:2rem;align-items:start; }
@media (max-width:980px){ .article-layout{ grid-template-columns:1fr; } .article-aside{ position:static !important; } }
.article-aside{ position:sticky;top:calc(var(--header-h) + 1rem);display:grid;gap:1rem; }
.article-meta{ display:flex;flex-wrap:wrap;gap:.3rem 1rem;font-size:.8rem;color:var(--ink-3); }
.article-meta span{ display:inline-flex;align-items:center;gap:.3rem; }
.article-meta svg{ width:15px;height:15px; }

.prose{ font-size:1.01rem;line-height:2.05;color:var(--ink); }
.prose > *:first-child{ margin-top:0; }
.prose h2{ font-size:1.32rem;margin:2.3rem 0 .75rem;scroll-margin-top:calc(var(--header-h) + 1rem); }
.prose h3{ font-size:1.08rem;margin:1.6rem 0 .5rem; }
.prose p{ margin:0 0 1.1rem;color:var(--ink-2); }
.prose strong{ color:var(--ink); }
.prose ul,.prose ol{ padding-inline-start:1.5rem;margin:0 0 1.2rem;color:var(--ink-2); }
.prose li{ margin:.35rem 0; }
.prose blockquote,.prose .callout{
  margin:1.4rem 0;padding:.95rem 1.15rem;border-radius:var(--r);
  background:var(--brand-soft);border-inline-start:4px solid var(--brand);color:var(--ink);
}
.prose blockquote p:last-child,.prose .callout p:last-child{ margin:0; }
.prose .table-wrap{ overflow-x:auto;margin:0 0 1.3rem;border:1px solid var(--line);border-radius:var(--r); }
.prose table{ width:100%;border-collapse:collapse;font-size:.88rem;line-height:1.8;min-width:520px; }
.prose th,.prose td{ padding:.6rem .8rem;text-align:start;border-bottom:1px solid var(--line);vertical-align:top; }
.prose thead th{ background:var(--bg-sunken);font-weight:700;color:var(--ink); }
.prose tbody tr:last-child td{ border-bottom:0; }
.prose .sms-sample{
  background:var(--bg-sunken);border:1px dashed var(--line-strong);border-radius:var(--r);
  padding:.8rem 1rem;margin:0 0 1rem;font-size:.92rem;line-height:1.95;color:var(--ink);
}

.toc{ font-size:.86rem; }
.toc b{ display:block;margin-bottom:.4rem; }
.toc ol{ margin:0;padding-inline-start:1.2rem;color:var(--ink-2); }
.toc li{ margin:.3rem 0; }
.toc a{ color:var(--ink-2); }
.toc a:hover{ color:var(--brand-600); }

/* ---------- جدول نمونه‌ی تنظیم خدمات در صفحات صنف ---------- */
.sample-card .table-wrap{ overflow-x:auto; }
.sample-card table{ width:100%;border-collapse:collapse;font-size:.87rem;min-width:480px; }
.sample-card th,.sample-card td{ padding:.55rem .7rem;text-align:start;border-bottom:1px solid var(--line); }
.sample-card thead th{ color:var(--ink-3);font-weight:600;font-size:.8rem; }
.sample-card tbody tr:last-child td{ border-bottom:0; }

/* ---------- بخش «درباره»ی صفحه‌ی رزرو (سمت سرور) ---------- */
.biz-about h3{ font-size:.98rem;margin:1.2rem 0 .6rem; }
.biz-about p{ color:var(--ink-2);font-size:.92rem; }
.chip-list{ list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:.45rem; }
.chip-list li{
  background:var(--bg-sunken);border:1px solid var(--line);border-radius:99px;
  padding:.18rem .75rem;font-size:.8rem;color:var(--ink-2);
}
.biz-about-grid{ display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem 1.6rem; }
@media (max-width:640px){ .biz-about-grid{ grid-template-columns:1fr; } }
.hours-table{ width:100%;border-collapse:collapse;font-size:.86rem; }
.hours-table th{ text-align:start;font-weight:600;color:var(--ink-2);padding:.32rem 0;width:34%; }
.hours-table td{ padding:.32rem 0;font-variant-numeric:tabular-nums; }
.hours-table tr + tr{ border-top:1px dashed var(--line); }
.hours-table .closed{ color:var(--ink-3); }
.info-list{ list-style:none;padding:0;margin:0;font-size:.86rem; }
.info-list li{ padding:.32rem 0; }
.info-list li + li{ border-top:1px dashed var(--line); }
.info-list span{ color:var(--ink-3);margin-inline-end:.25rem; }

/* ---------- پاورقی سایت ---------- */
.site-footer{ border-top:1px solid var(--line);margin-top:4rem;padding:2.6rem 0 1.4rem;font-size:.86rem;color:var(--ink-3); }
.footer-grid{ display:grid;grid-template-columns:1.5fr repeat(3,minmax(0,1fr));gap:2rem; }
@media (max-width:900px){ .footer-grid{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:520px){ .footer-grid{ grid-template-columns:1fr; } }
.footer-grid h3{ font-size:.9rem;color:var(--ink);margin-bottom:.7rem; }
.footer-grid ul{ list-style:none;padding:0;margin:0; }
.footer-grid li{ margin:.38rem 0; }
.footer-grid a{ color:var(--ink-2); }
.footer-grid a:hover{ color:var(--brand-600); }
.footer-brand p{ margin:.8rem 0;line-height:1.9; }
.footer-social{ display:inline-flex;align-items:center;gap:.4rem;font-weight:700;direction:ltr; }
.footer-bottom{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;
  border-top:1px solid var(--line);margin-top:2rem;padding-top:1.2rem;
}

/* ---------- ۴۰۴ ---------- */
.nf-code{
  font-size:clamp(3.5rem,11vw,6rem);font-weight:900;line-height:1.1;
  background:linear-gradient(120deg,var(--brand),#EC4899);-webkit-background-clip:text;background-clip:text;color:transparent;
}

/* حرکت کمتر برای کاربرانی که ترجیح می‌دهند */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{ animation-duration:.01ms !important;transition-duration:.01ms !important; }
}

/* ---------------------------------------------------------------- مرکز پیامک */
.grid-cmp{ grid-template-columns:minmax(0,1fr) 340px;align-items:start; }
@media (max-width:1100px){ .grid-cmp{ grid-template-columns:1fr; } }
.plan .mt-auto{ margin-top:auto; }

.choice-grid{ display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem; }
@media (max-width:640px){ .choice-grid{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
.choice{
  display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:.8rem .5rem;
  border:1.5px solid var(--line);border-radius:12px;background:var(--surface);cursor:pointer;
  font-family:inherit;font-size:.82rem;font-weight:600;color:var(--ink-2);text-align:center;
  transition:border-color .15s var(--ease),background .15s var(--ease);
}
.choice svg{ width:20px;height:20px;color:var(--ink-3); }
.choice:hover{ border-color:var(--brand); }
.choice.active{ border-color:var(--brand);background:var(--brand-soft);color:var(--brand-700); }
.choice.active svg{ color:var(--brand); }
html[data-theme="dark"] .choice{ background:var(--surface-2); }
html[data-theme="dark"] .choice.active{ color:var(--brand); }

.pick-list{
  display:flex;flex-direction:column;gap:.45rem;max-height:260px;overflow:auto;
  padding:.7rem;border:1px solid var(--line);border-radius:12px;background:var(--bg-sunken);
}
.pick-list .check.is-off{ opacity:.55;cursor:not-allowed; }

.sms-phone{
  background:var(--bg-sunken);border-radius:16px;padding:1rem;min-height:120px;
  display:flex;align-items:flex-start;
}
.sms-bubble{
  background:var(--surface);border:1px solid var(--line);border-radius:14px 14px 14px 4px;
  padding:.7rem .85rem;font-size:.86rem;line-height:1.85;white-space:pre-wrap;word-break:break-word;
  max-width:100%;box-shadow:var(--sh-1);
}
html[data-theme="dark"] .sms-bubble{ background:var(--surface-2); }

/* ---------------------------------------------------------------- زبان‌ها و جهت متن
   صفحات مشتری (رزرو و پیگیری نوبت) و صفحه‌ی فرود به فارسی، انگلیسی و عربی نمایش داده می‌شوند.
   بیشتر چیدمان با ویژگی‌های منطقی (inline-start) نوشته شده؛ این‌ها استثناهای جهت‌دار هستند. */
html[dir="ltr"] body{ direction:ltr; }
html[dir="ltr"] .select{ padding-left:.9rem;padding-right:2.2rem;background-position:right .8rem center; }
html[dir="ltr"] .input-ltr{ text-align:left; }
html[lang="en"] body{ letter-spacing:0; }

.lang-switch{
  display:inline-flex;align-items:center;gap:2px;padding:3px;border-radius:99px;
  background:var(--bg-sunken);border:1px solid var(--line);
}
.lang-switch a{
  min-width:32px;height:28px;padding:0 .55rem;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;
  font-size:.78rem;font-weight:700;color:var(--ink-3);text-decoration:none;line-height:1;
}
.lang-switch a:hover{ color:var(--ink); }
.lang-switch a.active{ background:var(--bg-elev);color:var(--brand-700);box-shadow:var(--sh-1); }
html[data-theme="dark"] .lang-switch a.active{ color:var(--brand); }
@media (max-width:420px){ .lang-switch a{ min-width:28px;padding:0 .4rem; } }

/* ---------------------------------------------------------------- تقویم هفتگی پنل
   هفت ستون (شنبه تا جمعه) با شبکه‌ی ساعتی. ارتفاع هر دقیقه با متغیر --min-h تعیین
   می‌شود تا نوبت‌ها دقیقاً روی ساعت خودشان بنشینند. روی گوشی، جدول افقی اسکرول می‌خورد. */
.wk{ --min-h:1.05px; --gut:52px; overflow-x:auto; border:1px solid var(--line); border-radius:var(--r-lg); }
.wk-inner{ min-width:760px; }
.wk-head{
  display:grid;grid-template-columns:var(--gut) repeat(7,1fr);
  position:sticky;top:0;z-index:3;background:var(--bg-elev);border-bottom:1px solid var(--line);
}
.wk-head > div{ padding:.5rem .3rem;text-align:center;border-inline-start:1px solid var(--line); }
.wk-head > div:first-child{ border-inline-start:0; }
.wk-head b{ display:block;font-size:.82rem; }
.wk-head span{ font-size:.72rem;color:var(--ink-3); }
.wk-head .is-today b{ color:var(--brand-700); }
html[data-theme="dark"] .wk-head .is-today b{ color:var(--brand); }
.wk-head .is-today{ background:var(--brand-soft); }

.wk-body{ display:grid;grid-template-columns:var(--gut) repeat(7,1fr);position:relative; }
.wk-hours{ position:relative;background:var(--bg-sunken); }
.wk-hour{
  position:absolute;inset-inline:0;text-align:center;font-size:.7rem;color:var(--ink-3);
  transform:translateY(-.5em);
}
.wk-col{ position:relative;border-inline-start:1px solid var(--line);min-height:120px; }
.wk-col.is-today{ background:color-mix(in srgb, var(--brand) 4%, transparent); }
.wk-line{ position:absolute;inset-inline:0;border-top:1px solid var(--line);opacity:.65; }
.wk-line.half{ border-top-style:dotted;opacity:.4; }
.wk-now{ position:absolute;inset-inline:0;border-top:2px solid var(--err);z-index:2;pointer-events:none; }
.wk-now::before{
  content:'';position:absolute;inset-inline-start:0;top:-4px;width:7px;height:7px;border-radius:50%;background:var(--err);
}

.wk-ev{
  position:absolute;inset-inline:3px;border-radius:8px;padding:.2rem .35rem;overflow:hidden;
  font-size:.72rem;line-height:1.35;cursor:pointer;border:1px solid var(--line);
  background:var(--bg-elev);box-shadow:var(--sh-1);border-inline-start:3px solid var(--brand);
}
.wk-ev b{ display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.wk-ev span{ color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block; }
.wk-ev.is-cancelled{ opacity:.5;text-decoration:line-through; }
.wk-ev.is-dragging{ opacity:.4; }
.wk-ev:focus-visible{ outline:2px solid var(--brand);outline-offset:1px; }
.wk-col.is-drop{ background:var(--brand-soft); }
.wk-ghost{
  position:absolute;inset-inline:3px;border-radius:8px;border:2px dashed var(--brand);
  background:var(--brand-soft);pointer-events:none;z-index:4;
  display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:700;color:var(--brand-700);
}
html[data-theme="dark"] .wk-ghost{ color:var(--brand); }

.wk-legend{ display:flex;flex-wrap:wrap;gap:.8rem;font-size:.75rem;color:var(--ink-3);margin-top:.6rem; }
.wk-legend i{ width:9px;height:9px;border-radius:3px;display:inline-block;margin-inline-end:.3rem; }

.view-switch{ display:inline-flex;gap:2px;padding:3px;border-radius:var(--r);background:var(--bg-sunken);border:1px solid var(--line); }
.view-switch button{
  border:0;background:transparent;cursor:pointer;font:inherit;font-size:.8rem;font-weight:600;
  color:var(--ink-3);padding:.3rem .7rem;border-radius:calc(var(--r) - 3px);line-height:1.6;
}
.view-switch button.active{ background:var(--bg-elev);color:var(--brand-700);box-shadow:var(--sh-1); }
html[data-theme="dark"] .view-switch button.active{ color:var(--brand); }

@media (max-width:640px){
  .wk{ --gut:38px; }
  .wk-inner{ min-width:680px; }
}

/* ---------------------------------------------------------------- نوار روزهای تغییر زمان
   در پنجره‌ی «تغییر زمان نوبت» به‌جای تقویم کامل، نوار افقی روزها نشان داده می‌شود. */
.day-strip{ display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.4rem;margin-bottom:.9rem; }
.day-strip::-webkit-scrollbar{ height:5px; }
.day-strip::-webkit-scrollbar-thumb{ background:var(--line-strong);border-radius:99px; }
.day-chip{
  flex:none;min-width:58px;padding:.45rem .3rem;border-radius:var(--r);cursor:pointer;
  border:1px solid var(--line);background:var(--bg-elev);text-align:center;font:inherit;line-height:1.5;
}
.day-chip b{ display:block;font-size:.95rem;font-weight:700; }
.day-chip span{ display:block;font-size:.68rem;color:var(--ink-3); }
.day-chip.selected{ background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:var(--sh-brand); }
.day-chip.selected span{ color:rgba(255,255,255,.85); }
.day-chip.has-slots{ border-color:var(--ok); }
.day-chip.has-slots.selected{ border-color:var(--brand); }

/* ================================================================ نسخه‌ی ۲.۷ */
/* آیکون داخل برچسب‌ها */
.badge svg{ width:13px;height:13px;flex:none; }

/* پیوند درون‌متنی */
a.link{ color:var(--brand-700);font-weight:700;text-decoration:underline;text-underline-offset:3px; }
html[data-theme="dark"] a.link{ color:var(--brand); }

/* آپلودگرِ قفل‌شده به‌خاطر پلن: پیش از انتخاب عکس معلوم است چرا کار نمی‌کند */
.uploader.is-locked .uploader-preview{ filter:grayscale(.5);opacity:.75; }
.uploader-lock{ display:flex;align-items:center;gap:.35rem;margin-top:.45rem;font-size:.76rem;font-weight:700;color:#B45309; }
.uploader-lock svg{ width:14px;height:14px;flex:none; }
html[data-theme="dark"] .uploader-lock{ color:var(--warn); }
#bColors.is-locked .btn{ opacity:.4;cursor:not-allowed; }

/* زبانه‌های داخل پنجره (متخصص، خدمت) */
.modal-tabs{ margin:-.3rem 0 1.1rem; }
.modal-tabs .tab{ padding:.6rem .85rem; }
.tab-dot{ display:inline-grid;place-items:center;min-width:1.2rem;height:1.2rem;padding:0 .3rem;border-radius:99px;
  font-size:.7rem;background:var(--brand-soft);color:var(--brand-700);margin-inline-start:.25rem; }

/* ترجمه‌ی خدمات و متخصصان */
.tr-lang{ padding:.9rem 1rem .2rem;border:1px solid var(--line);border-radius:var(--r);margin-bottom:.9rem;background:var(--bg-sunken); }
.tr-lang-title{ margin-bottom:.7rem; }
.tr-lang .input,.tr-lang .textarea{ background:var(--bg-elev); }
.tr-lang [dir="ltr"]{ text-align:left; }

@media (max-width:640px){
  .modal-tabs{ margin:-.2rem -.2rem 1rem; }
  .modal-tabs .tab{ padding:.55rem .7rem;font-size:.84rem; }
  .tr-lang{ padding:.8rem .8rem .1rem; }
}

/* ================================================================ نسخه‌ی ۲.۸ — آموزش ویدیویی */
.help-chip{ gap:.35rem; }
.help-chip svg{ width:17px;height:17px; }
.help-chip-time{ font-size:.72rem;opacity:.7;font-weight:600; }

.tut-player video{ width:100%;aspect-ratio:16/9;border-radius:var(--r);background:#0B0718;display:block; }
.tut-now{ display:flex;align-items:flex-start;justify-content:space-between;gap:.8rem;margin:.8rem 0 1rem; }
.tut-now b{ font-size:.98rem; }
.tut-sub{ font-size:.8rem;color:var(--ink-3);margin-top:.15rem; }
.tut-list{ display:flex;flex-direction:column;gap:.35rem;border-top:1px solid var(--line);padding-top:.8rem; }
.tut-item{ display:flex;align-items:center;gap:.7rem;width:100%;text-align:right;padding:.55rem .7rem;border-radius:var(--r);
  border:1px solid transparent;background:none;cursor:pointer;font-family:inherit;color:inherit; }
.tut-item:hover{ background:var(--bg-sunken); }
.tut-item.active{ background:var(--brand-soft);border-color:var(--brand-ring); }
.tut-item b{ display:block;font-size:.86rem; }
.tut-item span span,.tut-item .grow span{ display:block;font-size:.74rem;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.tut-n{ flex:none;width:28px;height:28px;border-radius:9px;display:grid;place-items:center;font-weight:800;font-size:.8rem;
  background:var(--bg-sunken);color:var(--ink-2); }
.tut-item.active .tut-n{ background:var(--brand);color:#fff; }
.tut-time{ flex:none;font-size:.74rem;color:var(--ink-3);font-weight:700; }

.tut-hero{ background:linear-gradient(135deg,var(--brand-soft),transparent 70%); }
.tut-card{ display:flex;flex-direction:column;gap:.7rem;text-align:right;padding:.7rem;cursor:pointer;font-family:inherit;color:inherit;width:100%; }
.tut-thumb{ position:relative;display:block;border-radius:calc(var(--r) - 2px);overflow:hidden;aspect-ratio:16/9;background:var(--bg-sunken); }
.tut-thumb img{ width:100%;height:100%;object-fit:cover;display:block; }
.tut-play{ position:absolute;inset:0;display:grid;place-items:center;color:#fff;opacity:.92;transition:transform .2s var(--ease); }
.tut-play svg{ width:54px;height:54px;filter:drop-shadow(0 6px 16px rgba(0,0,0,.35)); }
.tut-card:hover .tut-play{ transform:scale(1.08); }
.tut-dur{ position:absolute;bottom:.45rem;left:.45rem;padding:.1rem .45rem;border-radius:6px;background:rgba(10,6,20,.72);color:#fff;
  font-size:.72rem;font-weight:700; }
.tut-meta{ display:flex;flex-direction:column;gap:.3rem;padding:0 .2rem .2rem; }
.tut-meta b{ font-size:.95rem; }
.tut-meta > span:last-child{ font-size:.78rem;color:var(--ink-3);line-height:1.7; }
.tut-meta .badge{ align-self:flex-start; }

/* قدم‌های شروع روی داشبورد */
.ob-card h3 svg{ width:20px;height:20px;vertical-align:-4px;color:var(--brand); }
.ob-bar{ height:6px;border-radius:99px;background:var(--bg-sunken);overflow:hidden;margin-bottom:.9rem; }
.ob-bar i{ display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--brand),#EC4899); }
.ob-steps{ display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem 1rem; }
.ob-step{ display:flex;flex-wrap:wrap;align-items:center;gap:.65rem;padding:.55rem .6rem;border-radius:var(--r);border:1px solid var(--line); }
.ob-step .grow{ flex:1 1 170px; }
.ob-act{ display:flex;gap:.4rem;margin-inline-start:auto; }
.ob-step b{ display:block;font-size:.86rem; }
.ob-step .grow span{ display:block;font-size:.75rem;color:var(--ink-3); }
.ob-step.done{ opacity:.6; }
.ob-step.done b{ text-decoration:line-through;text-decoration-color:var(--ink-3); }
.ob-dot{ flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:.78rem;font-weight:800;
  background:var(--bg-sunken);color:var(--ink-2); }
.ob-dot svg{ width:15px;height:15px; }
.ob-step.done .ob-dot{ background:var(--ok-soft);color:var(--ok); }
@media (max-width:760px){ .ob-steps{ grid-template-columns:1fr; } }
@media (max-width:640px){
  .tut-now{ flex-direction:column;gap:.4rem; }
  .help-chip{ padding-inline:.55rem; }
}

/* ==========================================================================
   فرم‌ساز و پرونده‌ی مشتری (نسخه‌ی ۲.۱۱)
   ff-*  موتور نمایش فرم (js/forms.js) — صفحه‌ی مشتری، پنل و بوم فرم‌ساز
   fb-*  فرم‌ساز (js/form-builder.js)
   frm-*، tpl-*، rec-*، apf-*  صفحه‌ی فرم‌ها، کتابخانه‌ی قالب، پرونده و فرم‌های نوبت در پنل
   fp-*  صفحه‌ی فرم مشتری (form.html)
   ========================================================================== */
.ff-grid{ display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:1.15rem 1rem; }
.ff-field{ grid-column:span 12;min-width:0; }
.ff-w9{grid-column:span 9;} .ff-w8{grid-column:span 8;} .ff-w6{grid-column:span 6;} .ff-w4{grid-column:span 4;} .ff-w3{grid-column:span 3;}
@media (max-width:640px){ .ff-grid .ff-field{ grid-column:span 12; } }
.ff-label{ display:block;font-size:.9rem;font-weight:700;color:var(--ink);margin-bottom:.45rem;line-height:1.7; }
.ff-req{ color:var(--err);font-weight:800;margin-inline-start:.25rem; }
.ff-cond{ display:inline-flex;color:var(--info);margin-inline-start:.35rem;vertical-align:-2px; }
.ff-section h4 .ff-cond{ margin:0; }
.ff-cond svg{ width:14px;height:14px; }
.ff-help{ font-size:.78rem;color:var(--ink-3);margin:-.25rem 0 .5rem;line-height:1.75; }
.ff-err{ font-size:.78rem;color:var(--err);margin-top:.4rem; }
.ff-err:empty{ display:none; }
.ff-field.has-err .input,.ff-field.has-err .select,.ff-field.has-err .textarea,
.ff-field.has-err .ff-seg,.ff-field.has-err .ff-sign-pad,.ff-field.has-err .ff-drop,
.ff-field.has-err .ff-consent,.ff-field.has-err .ff-opt,.ff-field.has-err .ff-chip{ border-color:var(--err); }
.ff-reveal{ animation:ffReveal .35s var(--ease); }
@keyframes ffReveal{ from{opacity:0;transform:translateY(-6px);} to{opacity:1;transform:none;} }

.ff-section{ border-bottom:1px solid var(--line);padding:.3rem 0 .55rem; }
.ff-section h4{ margin:0;font-size:1.02rem;display:flex;align-items:center;gap:.4rem; }
.ff-section p{ margin:.15rem 0 0;font-size:.82rem;color:var(--ink-3); }
.ff-note{ display:flex;gap:.6rem;align-items:flex-start;background:var(--info-soft);color:var(--ink-2);
  border-radius:var(--r);padding:.75rem .9rem;font-size:.85rem;line-height:1.9; }
.ff-note > svg{ color:var(--info);margin-top:.3rem; }
.ff-note b{ display:block;color:var(--ink); }

.ff-opts{ display:grid;gap:.45rem;grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); }
.ff-opt{ display:flex;align-items:center;gap:.6rem;padding:.62rem .8rem;border:1px solid var(--line-strong);border-radius:var(--r);
  cursor:pointer;transition:border-color .15s,background .15s;background:var(--bg-elev);font-size:.88rem;line-height:1.6; }
.ff-opt:hover{ border-color:var(--brand); }
.ff-opt input{ width:18px;height:18px;accent-color:var(--brand);flex:none;margin:0; }
.ff-opt:has(input:checked){ border-color:var(--brand);background:var(--brand-soft);color:var(--brand-700);font-weight:600; }
.ff-chips{ display:flex;flex-wrap:wrap;gap:.45rem; }
.ff-chip{ font-family:inherit;font-size:.86rem;padding:.5rem .95rem;border-radius:99px;border:1px solid var(--line-strong);
  background:var(--bg-elev);color:var(--ink-2);cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:.35rem;line-height:1.5; }
.ff-chip:hover{ border-color:var(--brand);color:var(--brand-700); }
.ff-chip.on{ background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:var(--sh-brand); }
.ff-chips.multi .ff-chip.on::before{ content:"✓";font-weight:800; }
.ff-other{ margin-top:.5rem; }

.ff-seg{ display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--r);overflow:hidden;background:var(--bg-elev); }
.ff-seg button{ font-family:inherit;font-size:.9rem;font-weight:600;padding:.6rem 1.7rem;border:0;background:transparent;
  color:var(--ink-2);cursor:pointer;transition:.15s; }
.ff-seg button + button{ border-inline-start:1px solid var(--line-strong); }
.ff-seg button.on{ background:var(--brand);color:#fff; }

.ff-scale{ display:grid;grid-template-columns:repeat(auto-fit,minmax(44px,1fr));gap:.35rem;max-width:520px; }
.ff-scale.wide{ max-width:none;grid-template-columns:repeat(auto-fit,minmax(34px,1fr)); }
.ff-scale button{ font-family:inherit;font-weight:700;font-size:.95rem;height:44px;border-radius:var(--r);border:1px solid var(--line-strong);
  background:var(--bg-elev);color:var(--ink-2);cursor:pointer;transition:.15s; }
.ff-scale button:hover{ border-color:var(--brand); }
.ff-scale button.on{ background:var(--brand);border-color:var(--brand);color:#fff; }
.ff-scale.stars{ display:flex;gap:.15rem; }
.ff-scale.stars button{ width:44px;border:0;background:transparent;color:var(--line-strong); }
.ff-scale.stars button svg{ width:32px;height:32px; }
.ff-scale.stars button.on{ background:transparent;color:#F59E0B; }
.ff-scale.stars button.on svg{ fill:#F59E0B; }
.ff-scale-labels{ display:flex;justify-content:space-between;font-size:.74rem;color:var(--ink-3);margin-top:.3rem;max-width:520px; }
.ff-scale.wide + .ff-scale-labels{ max-width:none; }
.ff-date{ display:grid;grid-template-columns:.8fr 1.4fr 1fr;gap:.5rem;max-width:440px; }

.ff-drop{ display:flex;align-items:center;gap:.8rem;padding:1rem;border:1.5px dashed var(--line-strong);border-radius:var(--r-lg);
  cursor:pointer;transition:.15s;background:var(--surface-2);color:var(--ink-2); }
.ff-drop:hover,.ff-drop.over{ border-color:var(--brand);background:var(--brand-soft);color:var(--brand-700); }
.ff-drop > svg{ width:26px;height:26px;color:var(--brand); }
.ff-drop b{ display:block;font-size:.9rem; }
.ff-drop small{ display:block;font-size:.75rem;color:var(--ink-3); }
.ff-file-list{ display:grid;gap:.5rem;margin-bottom:.5rem; }
.ff-file-list:empty{ display:none; }
.ff-file{ display:flex;align-items:center;gap:.7rem;padding:.45rem;border:1px solid var(--line);border-radius:var(--r);background:var(--bg-elev);min-width:0; }
.ff-file.uploading{ border-style:dashed; }
.ff-file-visual{ width:58px;height:58px;border-radius:var(--r-sm);overflow:hidden;flex:none;background:var(--bg-sunken);
  display:flex;align-items:center;justify-content:center; }
.ff-file-visual img{ width:100%;height:100%;object-fit:cover; }
.ff-file-ico svg{ width:26px;height:26px;color:var(--err); }
.ff-file-meta{ flex:1;min-width:0;display:flex;flex-direction:column; }
.ff-file-name{ font-size:.84rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.ff-file-meta small{ font-size:.74rem;color:var(--ink-3); }
.ff-file-bar{ height:4px;border-radius:99px;background:var(--bg-sunken);overflow:hidden;margin-top:.3rem; }
.ff-file-bar i{ display:block;height:100%;background:var(--brand);transition:width .2s; }
.ff-file-x{ width:32px;height:32px;border-radius:50%;border:0;background:var(--bg-sunken);color:var(--ink-3);cursor:pointer;
  display:flex;align-items:center;justify-content:center;flex:none; }
.ff-file-x:hover{ background:var(--err-soft);color:var(--err); }
.ff-file-x svg{ width:16px;height:16px; }

.ff-sign-pad{ position:relative;height:190px;border:1.5px dashed var(--line-strong);border-radius:var(--r-lg);background:#fff;
  touch-action:none;overflow:hidden; }
.ff-sign-pad canvas{ position:absolute;inset:0;width:100%;height:100%;cursor:crosshair;touch-action:none;z-index:1; }
.ff-sign-hint{ position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:.4rem;color:#9a9ab0;
  font-size:.9rem;pointer-events:none;transition:opacity .2s; }
.ff-sign-pad.signed .ff-sign-hint{ opacity:0; }
.ff-sign-pad::after{ content:"";position:absolute;inset-inline:12%;bottom:40px;border-bottom:1px solid #dcdce8;pointer-events:none; }
.ff-sign-bar{ display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:.4rem;font-size:.8rem;color:var(--ok); }
.ff-sign-state{ display:inline-flex;align-items:center;gap:.3rem; }
.ff-sign-state svg{ width:16px;height:16px; }
.ff-sign-saving{ color:var(--ink-3); }
.ff-sign-done{ display:flex;align-items:center;gap:1rem;flex-wrap:wrap; }
.ff-sign-done img{ max-height:110px;max-width:280px;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:.3rem; }

.ff-consent{ border:1px solid var(--line-strong);border-radius:var(--r-lg);overflow:hidden;background:var(--bg-elev); }
.ff-consent-text{ max-height:230px;overflow-y:auto;padding:.9rem 1rem;font-size:.84rem;line-height:2.05;color:var(--ink-2);
  background:var(--surface-2);border-bottom:1px solid var(--line); }
.ff-consent-check{ display:flex;align-items:flex-start;gap:.6rem;padding:.85rem 1rem;cursor:pointer;font-weight:700;font-size:.9rem; }
.ff-consent-check input{ width:20px;height:20px;accent-color:var(--brand);flex:none;margin-top:.2rem; }

.ff-teeth{ display:inline-flex;flex-direction:column;gap:.35rem;max-width:100%;overflow-x:auto;padding:.55rem;
  border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-2); }
.ff-teeth-head{ display:flex;justify-content:space-between;font-size:.7rem;color:var(--ink-3);padding:0 .2rem; }
.ff-teeth-row{ display:flex;align-items:stretch;gap:.4rem; }
.ff-teeth-row.upper{ padding-bottom:.35rem;border-bottom:1px dashed var(--line-strong); }
.ff-teeth-half{ display:flex;gap:.2rem; }
.ff-teeth-mid{ width:2px;background:var(--line-strong);border-radius:2px; }
.ff-tooth{ font-family:inherit;width:30px;height:36px;border-radius:9px 9px 13px 13px;border:1px solid var(--line-strong);
  background:var(--bg-elev);color:var(--ink-2);font-size:.72rem;font-weight:700;cursor:pointer;display:inline-flex;
  align-items:center;justify-content:center;transition:.12s;font-variant-numeric:tabular-nums;padding:0; }
.ff-teeth-row.lower .ff-tooth{ border-radius:13px 13px 9px 9px; }
.ff-tooth:hover{ border-color:var(--brand); }
.ff-tooth.on{ background:var(--brand);border-color:var(--brand);color:#fff; }
span.ff-tooth{ cursor:default;width:25px;height:29px; }
.ff-teeth-sel{ font-size:.8rem;color:var(--ink-3);margin-top:.4rem; }
.ff-teeth-sel b{ color:var(--ink); }
@media (max-width:640px){ .ff-tooth{ width:24px;height:32px;font-size:.64rem; } span.ff-tooth{ width:21px;height:26px; } }

.ffv .ff-grid{ gap:.1rem 1rem; }
.ffv-item{ padding:.6rem 0;border-bottom:1px dashed var(--line); }
.ffv-q{ font-size:.78rem;color:var(--ink-3);margin-bottom:.15rem;line-height:1.7; }
.ffv-a{ font-size:.92rem;font-weight:600;color:var(--ink);display:flex;flex-wrap:wrap;align-items:center;gap:.3rem;line-height:1.85; }
.ffv-text{ font-weight:500; }
.ffv-empty{ color:var(--ink-3);font-weight:400; }
.ffv-chip{ display:inline-flex;padding:.08rem .6rem;border-radius:99px;background:var(--brand-soft);color:var(--brand-700);font-size:.8rem;font-weight:600; }
.ffv-muted{ color:var(--ink-3);font-weight:400; }
html[data-theme="dark"] .ffv-chip{ color:#DDD6FE;background:rgba(167,139,250,.18); }
.ffv-stars{ display:inline-flex;color:var(--line-strong); }
.ffv-stars svg{ width:16px;height:16px; }
.ffv-stars .on{ color:#F59E0B; }
.ffv-stars .on svg{ fill:#F59E0B; }
.ffv-files{ display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.5rem;width:100%;font-weight:400; }
.ffv-sign img{ max-height:90px;background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:.25rem; }
.ffv-section{ margin-top:.9rem; }
.ffv-consent{ font-size:.78rem;color:var(--ink-3);font-weight:400;margin-top:.2rem; }
.ffv-consent summary{ cursor:pointer; }
.ffv-consent div{ padding:.5rem;background:var(--surface-2);border-radius:var(--r-sm);margin-top:.3rem;line-height:1.9; }

/* ---------------------------------------------------------------- فرم‌ساز */
.fb{ display:flex;flex-direction:column;height:calc(100vh - var(--header-h) - 3.2rem);height:calc(100dvh - var(--header-h) - 3.2rem);
  min-height:560px;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-xl);overflow:hidden; }
.fb-top{ display:flex;align-items:center;gap:.5rem;padding:.6rem .8rem;border-bottom:1px solid var(--line);flex-wrap:wrap; }
.fb-title{ flex:1 1 200px;min-width:0;font-family:inherit;font-size:1.05rem;font-weight:800;border:1px solid transparent;background:transparent;
  color:var(--ink);padding:.4rem .6rem;border-radius:var(--r-sm); }
.fb-title:hover{ border-color:var(--line); }
.fb-title:focus{ outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-ring); }
.fb-state{ font-size:.75rem;color:var(--ink-3);white-space:nowrap;display:inline-flex;align-items:center;gap:.3rem; }
.fb-state.dirty{ color:#B45309; }
.fb-state.dirty::before{ content:"";width:7px;height:7px;border-radius:50%;background:var(--warn); }
.fb-top .btn-icon{ width:36px;height:36px; }
.fb-main{ flex:1;display:grid;grid-template-columns:232px minmax(0,1fr) 340px;min-height:0; }
.fb-palette,.fb-inspector{ overflow-y:auto;background:var(--surface-2);min-height:0; }
.fb-palette{ border-inline-end:1px solid var(--line);padding:.9rem; }
.fb-inspector{ border-inline-start:1px solid var(--line); }
.fb-pal-group{ font-size:.72rem;font-weight:800;color:var(--ink-3);margin:.9rem .2rem .4rem; }
.fb-pal-group:first-child{ margin-top:0; }
.fb-tiles{ display:grid;grid-template-columns:1fr 1fr;gap:.4rem; }
.fb-tile{ display:flex;flex-direction:column;align-items:center;gap:.3rem;padding:.65rem .3rem;border:1px solid var(--line);border-radius:var(--r);
  background:var(--bg-elev);cursor:grab;font-family:inherit;font-size:.74rem;font-weight:600;color:var(--ink-2);transition:.15s;
  user-select:none;-webkit-user-select:none;touch-action:none;text-align:center;line-height:1.4; }
.fb-tile svg{ width:20px;height:20px;color:var(--brand); }
.fb-tile:hover{ border-color:var(--brand);color:var(--brand-700);transform:translateY(-1px);box-shadow:var(--sh-1); }
.fb-pal-tip{ font-size:.72rem;color:var(--ink-3);margin-top:1rem;line-height:1.8; }
.fb-canvas{ overflow-y:auto;padding:1.5rem;background:var(--bg-sunken);min-height:0; }
.fb-paper{ max-width:780px;margin:0 auto;background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-xl);
  box-shadow:var(--sh-2);padding:1.5rem 1.5rem 1.2rem; }
html[data-theme="dark"] .fb-paper{ background:#1A1A24; }
.fb-paper-head{ padding-bottom:.9rem;margin-bottom:1rem;border-bottom:3px solid var(--brand);cursor:pointer; }
.fb-paper-head h2{ font-size:1.25rem;margin:0; }
.fb-paper-head p{ color:var(--ink-3);font-size:.86rem;margin:.3rem 0 0;white-space:pre-line; }
.fb-paper-head .frm-badges{ margin-top:.5rem; }
.fb-grid .ff-grid{ gap:.3rem .35rem; }
.fb-grid .ff-field{ position:relative;border:1.5px dashed transparent;border-radius:var(--r);padding:.7rem .75rem .75rem;cursor:pointer;
  transition:border-color .12s,background .12s; }
.fb-grid .ff-field:hover{ border-color:var(--line-strong);background:var(--surface-2); }
.fb-grid .ff-field.fb-sel{ border:1.5px solid var(--brand);background:color-mix(in srgb,var(--brand-soft) 55%,transparent); }
.fb-grid .ff-field.fb-dragging{ opacity:.35; }
.fb-grid .ff-control{ pointer-events:none; }
.fb-tools{ position:absolute;top:-15px;inset-inline-end:10px;display:none;gap:1px;background:var(--bg-elev);border:1px solid var(--line);
  border-radius:10px;box-shadow:var(--sh-2);padding:2px;z-index:3; }
.fb-grid .ff-field:hover .fb-tools,.fb-grid .ff-field.fb-sel .fb-tools{ display:flex; }
.fb-tools button{ width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:var(--ink-2);cursor:pointer;
  display:flex;align-items:center;justify-content:center;font-family:inherit;font-size:.7rem;font-weight:800;padding:0; }
.fb-tools button:hover{ background:var(--bg-sunken);color:var(--ink); }
.fb-tools button[data-act="delete"]:hover{ background:var(--err-soft);color:var(--err); }
.fb-tools svg{ width:15px;height:15px; }
.fb-tools .fb-handle{ cursor:grab;touch-action:none; }
.fb-type{ position:absolute;top:-10px;inset-inline-start:10px;font-size:.66rem;font-weight:700;background:var(--brand);color:#fff;
  border-radius:99px;padding:0 .55rem;display:none;line-height:1.7;z-index:2; }
.fb-grid .ff-field.fb-sel .fb-type{ display:block; }
.fb-placeholder{ grid-column:span 12;height:56px;border:2px dashed var(--brand);border-radius:var(--r);background:var(--brand-soft);
  display:flex;align-items:center;justify-content:center;color:var(--brand-700);font-size:.8rem;font-weight:700; }
.fb-ghost{ position:fixed;z-index:9500;pointer-events:none;padding:.5rem .9rem;background:var(--brand);color:#fff;border-radius:10px;
  box-shadow:var(--sh-3);font-size:.82rem;font-weight:700;display:flex;align-items:center;gap:.4rem;
  transform:translate(-50%,-120%) rotate(-2deg);white-space:nowrap; }
.fb-ghost svg{ width:16px;height:16px; }
body.fb-dragging-now,body.fb-dragging-now *{ cursor:grabbing !important;user-select:none;-webkit-user-select:none; }
.fb-empty{ border:2px dashed var(--line-strong);border-radius:var(--r-lg);padding:2.2rem 1rem;text-align:center;color:var(--ink-3); }
.fb-empty svg{ width:36px;height:36px;color:var(--brand);margin-bottom:.4rem; }
.fb-add{ width:100%;margin-top:1rem;border:1.5px dashed var(--line-strong);background:transparent;border-radius:var(--r);padding:.8rem;
  color:var(--ink-2);font-family:inherit;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.4rem; }
.fb-add:hover{ border-color:var(--brand);color:var(--brand-700);background:var(--brand-soft); }
.fb-insp-tabs{ margin:0;padding:0 .8rem;position:sticky;top:0;background:var(--surface-2);z-index:2; }
.fb-insp-body{ padding:1rem; }
.fb-insp-body .field{ margin-bottom:.9rem; }
.fb-insp-body .label{ font-size:.78rem; }
.fb-insp-body .input,.fb-insp-body .select,.fb-insp-body .textarea{ padding:.5rem .7rem;font-size:.85rem; }
.fb-insp-head{ display:flex;align-items:center;gap:.6rem;margin-bottom:1rem; }
.fb-insp-ico{ width:34px;height:34px;border-radius:10px;background:var(--brand-soft);color:var(--brand);
  display:flex;align-items:center;justify-content:center;flex:none; }
.fb-insp-head b{ font-size:.92rem; }
.fb-insp-head small{ display:block;color:var(--ink-3);font-size:.72rem; }
.fb-seg{ display:flex;border:1px solid var(--line-strong);border-radius:var(--r-sm);overflow:hidden;background:var(--bg-elev); }
.fb-seg button{ flex:1;font-family:inherit;font-size:.74rem;font-weight:600;padding:.42rem .2rem;border:0;background:transparent;
  color:var(--ink-2);cursor:pointer; }
.fb-seg button + button{ border-inline-start:1px solid var(--line-strong); }
.fb-seg button.on{ background:var(--brand);color:#fff; }
.fb-opt-row{ display:flex;gap:.25rem;align-items:center;margin-bottom:.35rem; }
.fb-opt-row .input{ flex:1;min-width:0; }
.fb-mini{ width:30px;height:30px;border:1px solid var(--line);border-radius:8px;background:var(--bg-elev);color:var(--ink-3);cursor:pointer;
  display:flex;align-items:center;justify-content:center;flex:none;padding:0; }
.fb-mini:hover{ color:var(--ink);border-color:var(--line-strong); }
.fb-mini:disabled{ opacity:.35;cursor:default; }
.fb-mini svg{ width:14px;height:14px; }
.fb-row2{ display:grid;grid-template-columns:1fr 1fr;gap:.5rem; }
.fb-box{ border:1px solid var(--line);border-radius:var(--r);padding:.75rem;background:var(--bg-elev);margin-bottom:.9rem; }
.fb-box-title{ display:flex;align-items:center;gap:.4rem;font-size:.8rem;font-weight:800;margin-bottom:.5rem; }
.fb-box-title svg{ width:15px;height:15px;color:var(--brand); }
.fb-svc-list{ max-height:210px;overflow-y:auto;display:grid;gap:.35rem;margin-top:.5rem; }
.fb-aud{ display:grid;gap:.45rem; }
.fb-aud label{ display:flex;gap:.6rem;align-items:flex-start;border:1px solid var(--line-strong);border-radius:var(--r);padding:.6rem .7rem;
  cursor:pointer;background:var(--bg-elev); }
.fb-aud label:has(input:checked){ border-color:var(--brand);background:var(--brand-soft); }
.fb-aud input{ accent-color:var(--brand);margin-top:.35rem;flex:none; }
.fb-aud b{ display:block;font-size:.84rem; }
.fb-aud span{ font-size:.74rem;color:var(--ink-3);line-height:1.7; }
.fb-preview-frame{ margin:0 auto;transition:max-width .25s var(--ease); }
.fb-preview-frame.phone{ max-width:400px;border:10px solid #1b1b2e;border-radius:34px;padding:1.2rem .9rem;background:var(--bg-elev);box-shadow:var(--sh-3); }
.fb-preview-frame.phone .ff-grid .ff-field{ grid-column:span 12; }
.fb-preview-frame.desktop{ max-width:760px; }
@media (max-width:1180px){
  .fb-main{ grid-template-columns:minmax(0,1fr) 320px; }
  .fb-palette{ display:none; }
}
@media (max-width:860px){
  .fb{ height:auto;min-height:0;border-radius:var(--r-lg); }
  .fb-main{ grid-template-columns:1fr; }
  .fb-inspector{ display:none; }
  .fb-canvas{ padding:.7rem;overflow:visible; }
  .fb-paper{ padding:1rem;border-radius:var(--r-lg); }
  .fb-tools{ display:flex;top:-13px; }
  .fb-grid .ff-field{ padding:.95rem .6rem .7rem; }
  .fb-top .hide-fb-sm{ display:none; }
}

/* ---------------------------------------------------------------- صفحه‌ی فرم‌ها */
.frm-head{ display:flex;gap:1rem;align-items:center;flex-wrap:wrap; }
.frm-head .grow{ flex:1 1 280px; }
.frm-usage{ display:grid;grid-template-columns:repeat(2,minmax(140px,1fr));gap:.4rem 1rem;flex:0 1 380px;font-size:.76rem;color:var(--ink-3); }
.frm-usage b{ color:var(--ink);font-weight:700; }
.frm-cards{ display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:1rem; }
.frm-card{ display:flex;flex-direction:column;gap:.7rem;padding:1.1rem;position:relative; }
.frm-card.inactive{ opacity:.75; }
.frm-card-top{ display:flex;gap:.7rem;align-items:flex-start; }
.frm-ico{ width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none;background:var(--brand-soft);color:var(--brand); }
.frm-ico.staff{ background:var(--info-soft);color:var(--info); }
.frm-ico svg{ width:21px;height:21px; }
.frm-card h4{ margin:0;font-size:.98rem;line-height:1.6; }
.frm-card .card-sub{ display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden; }
.frm-badges{ display:flex;flex-wrap:wrap;gap:.3rem; }
.frm-meta{ display:flex;flex-wrap:wrap;gap:.3rem 1rem;font-size:.76rem;color:var(--ink-3); }
.frm-meta span{ display:inline-flex;align-items:center;gap:.25rem; }
.frm-meta svg{ width:14px;height:14px; }
.frm-actions{ display:flex;gap:.4rem;margin-top:auto;padding-top:.7rem;border-top:1px solid var(--line); }
.frm-actions .btn{ flex:1; }
.frm-actions .frm-menu .btn{ flex:none; }
.frm-menu{ position:relative; }
.frm-pop{ position:absolute;bottom:calc(100% + 6px);inset-inline-end:0;min-width:200px;background:var(--bg-elev);border:1px solid var(--line);
  border-radius:var(--r);box-shadow:var(--sh-3);padding:.3rem;z-index:30;display:none; }
html[data-theme="dark"] .frm-pop{ background:#1f1f2b; }
.frm-pop.open{ display:block; }
.frm-pop button{ display:flex;align-items:center;gap:.55rem;width:100%;padding:.55rem .7rem;border:0;background:transparent;border-radius:8px;
  font-family:inherit;font-size:.84rem;color:var(--ink-2);cursor:pointer;text-align:start; }
.frm-pop button:hover{ background:var(--bg-sunken);color:var(--ink); }
.frm-pop button.danger{ color:var(--err); }
.frm-pop button svg{ width:16px;height:16px; }
.cat-chips{ display:flex;gap:.4rem;overflow-x:auto;padding-bottom:.3rem;margin-bottom:1rem;scrollbar-width:none; }
.cat-chips::-webkit-scrollbar{ display:none; }
.cat-chip{ flex:none;font-family:inherit;font-size:.82rem;font-weight:600;padding:.45rem .9rem;border-radius:99px;border:1px solid var(--line-strong);
  background:var(--bg-elev);color:var(--ink-2);cursor:pointer;display:inline-flex;align-items:center;gap:.35rem; }
.cat-chip.on{ background:var(--ink);border-color:var(--ink);color:var(--bg); }
.cat-chip small{ opacity:.7; }
.tpl-grid{ display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:1rem; }
.tpl-card{ display:flex;flex-direction:column;overflow:hidden;padding:0; }
.tpl-strip{ height:6px;background:linear-gradient(90deg,var(--tpl-c,var(--brand)),color-mix(in srgb,var(--tpl-c,var(--brand)) 35%,transparent)); }
.tpl-body{ padding:1rem 1.05rem .6rem;display:flex;flex-direction:column;gap:.5rem;flex:1; }
.tpl-body h4{ margin:0;font-size:.95rem;line-height:1.6; }
.tpl-body p{ font-size:.8rem;color:var(--ink-3);margin:0;line-height:1.8; }
.tpl-foot{ display:flex;gap:.4rem;padding:.7rem 1.05rem 1rem; }
.tpl-foot .btn{ flex:1; }
.tpl-rec{ margin-bottom:1.4rem; }
.tpl-rec h4{ display:flex;align-items:center;gap:.4rem;font-size:.95rem; }
.tpl-rec h4 svg{ color:var(--brand); }

/* ---------------------------------------------------------------- پرونده‌ی مشتری و فرم‌های نوبت */
.rec-toolbar{ display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;margin-bottom:1rem; }
.rec-gallery{ display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:.45rem;margin-bottom:1.2rem; }
.rec-thumb{ position:relative;aspect-ratio:1;border-radius:var(--r);overflow:hidden;background:var(--bg-sunken);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;color:var(--err); }
.rec-thumb img{ width:100%;height:100%;object-fit:cover;transition:transform .25s; }
.rec-thumb:hover img{ transform:scale(1.05); }
.rec-thumb svg{ width:28px;height:28px; }
.rec-thumb small{ position:absolute;bottom:0;inset-inline:0;background:linear-gradient(transparent,rgba(0,0,0,.65));color:#fff;
  font-size:.62rem;padding:.6rem .35rem .2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.rec-list{ display:grid;gap:.6rem; }
.rec-item{ display:flex;gap:.8rem;padding:.8rem .9rem;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-elev);
  cursor:pointer;transition:border-color .15s,box-shadow .15s;text-align:start;font-family:inherit;color:inherit;width:100%; }
.rec-item:hover{ border-color:var(--brand);box-shadow:var(--sh-1); }
.rec-date{ flex:none;width:56px;text-align:center;border-inline-end:1px solid var(--line);padding-inline-end:.7rem; }
.rec-date b{ display:block;font-size:1.25rem;line-height:1.2;font-weight:800; }
.rec-date span{ font-size:.7rem;color:var(--ink-3); }
.rec-main{ flex:1;min-width:0; }
.rec-main h5{ margin:0 0 .2rem;font-size:.9rem;display:flex;flex-wrap:wrap;gap:.35rem;align-items:center; }
.rec-sum{ font-size:.78rem;color:var(--ink-2);line-height:1.8;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden; }
.rec-by{ font-size:.72rem;color:var(--ink-3);margin-top:.25rem;display:flex;flex-wrap:wrap;gap:.2rem .8rem; }
.rec-by span{ display:inline-flex;align-items:center;gap:.2rem; }
.rec-by svg{ width:12px;height:12px; }
.apf{ margin-bottom:1rem; }
.apf-title{ display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem; }
.apf-title .label{ margin:0; }
.apf-list{ display:grid;gap:.45rem; }
.apf-row{ display:flex;align-items:center;gap:.6rem;padding:.55rem .7rem;border:1px solid var(--line);border-radius:var(--r);flex-wrap:wrap; }
.apf-row .grow{ flex:1 1 150px;min-width:0; }
.apf-row b{ font-size:.86rem; }
.apf-row small{ display:block;font-size:.72rem;color:var(--ink-3); }
.apf-dot{ width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none; }
.apf-dot svg{ width:16px;height:16px; }
.apf-dot.done{ background:var(--ok-soft);color:var(--ok); }
.apf-dot.pending{ background:var(--warn-soft);color:#B45309; }
.apf-dot.covered{ background:var(--info-soft);color:var(--info); }
.apf-dot.staff{ background:var(--brand-soft);color:var(--brand); }
.apf-link{ display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;margin-top:.6rem;padding:.6rem .7rem;border-radius:var(--r);background:var(--surface-2); }
.apf-link .input{ flex:1 1 180px;font-size:.78rem;padding:.45rem .6rem; }
.apf-link > span{ font-size:.76rem;color:var(--ink-2);width:100%; }
.sub-meta{ display:flex;flex-wrap:wrap;gap:.3rem .9rem;font-size:.78rem;color:var(--ink-3);margin-bottom:1rem;padding:.6rem .8rem;
  border-radius:var(--r);background:var(--surface-2); }
.sub-meta b{ color:var(--ink); }

/* ---------------------------------------------------------------- صفحه‌ی فرم مشتری (form.html) */
.fp-wrap{ max-width:760px;margin:0 auto;padding:1.2rem 1rem 3rem; }
.fp-biz{ display:flex;align-items:center;gap:.8rem;margin-bottom:1rem; }
.fp-logo{ width:52px;height:52px;border-radius:14px;object-fit:cover;flex:none;background:var(--brand);color:#fff;display:flex;
  align-items:center;justify-content:center;font-weight:800;font-size:1.1rem; }
.fp-biz b{ display:block;font-size:1.02rem; }
.fp-biz span{ font-size:.8rem;color:var(--ink-3); }
.fp-appt{ display:flex;flex-wrap:wrap;gap:.3rem .9rem;font-size:.8rem;color:var(--ink-2);padding:.7rem .9rem;border-radius:var(--r-lg);
  background:var(--brand-soft);margin-bottom:1.1rem; }
.fp-appt span{ display:inline-flex;align-items:center;gap:.3rem; }
.fp-appt svg{ width:15px;height:15px;color:var(--brand); }
.fp-card{ background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--sh-2); }
html[data-theme="dark"] .fp-card{ background:#17171f; }
.fp-head{ padding:1.3rem 1.3rem 1rem;border-top:5px solid var(--brand);border-radius:var(--r-xl) var(--r-xl) 0 0; }
.fp-head h1{ font-size:1.25rem;margin:0 0 .3rem; }
.fp-head p{ color:var(--ink-2);font-size:.88rem;margin:0;white-space:pre-line;line-height:1.95; }
.fp-body{ padding:1.2rem 1.3rem 1.4rem; }
.fp-progress{ position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg-elev) 90%,transparent);backdrop-filter:blur(10px);
  padding:.6rem 1.3rem;border-bottom:1px solid var(--line); }
.fp-progress .meter{ height:6px; }
.fp-progress small{ display:flex;justify-content:space-between;font-size:.72rem;color:var(--ink-3);margin-bottom:.25rem; }
.fp-submit{ position:sticky;bottom:0;z-index:20;padding:.8rem 1.3rem calc(.8rem + env(safe-area-inset-bottom,0));
  background:color-mix(in srgb,var(--bg-elev) 92%,transparent);backdrop-filter:blur(10px);border-top:1px solid var(--line);
  display:flex;gap:.6rem;align-items:center;border-radius:0 0 var(--r-xl) var(--r-xl); }
.fp-submit .btn-primary{ flex:1; }
.fp-privacy{ display:flex;gap:.5rem;align-items:flex-start;font-size:.75rem;color:var(--ink-3);line-height:1.8;margin-top:1rem;padding:0 .3rem; }
.fp-privacy svg{ width:16px;height:16px;color:var(--ok);margin-top:.2rem;flex:none; }
.fp-list{ display:grid;gap:.7rem; }
.fp-item{ display:flex;align-items:center;gap:.8rem;padding:1rem;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-elev);
  cursor:pointer;transition:.15s;text-align:start;font-family:inherit;color:inherit;width:100%; }
.fp-item:hover{ border-color:var(--brand);box-shadow:var(--sh-2); }
.fp-item .grow{ flex:1;min-width:0; }
.fp-item b{ display:block;font-size:.95rem; }
.fp-item small{ font-size:.76rem;color:var(--ink-3); }
.fp-done{ text-align:center;padding:2.2rem 1.2rem; }
.fp-done .fp-done-ico{ width:72px;height:72px;margin:0 auto 1rem;border-radius:50%;background:var(--ok-soft);color:var(--ok);
  display:flex;align-items:center;justify-content:center; }
.fp-done .fp-done-ico svg{ width:36px;height:36px; }
.form-cta{ display:flex;gap:.8rem;align-items:center;padding:1rem;border-radius:var(--r-lg);border:1.5px solid var(--brand);background:var(--brand-soft);text-align:start; }
.form-cta .grow{ flex:1;min-width:0; }
.form-cta b{ display:block;font-size:.95rem; }
.form-cta small{ font-size:.78rem;color:var(--ink-2); }
.form-cta .fp-ico{ width:44px;height:44px;border-radius:12px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;flex:none; }
.form-cta .fp-ico svg{ width:22px;height:22px; }
.fb-line{ position:absolute;background:var(--brand);border-radius:3px;pointer-events:none;z-index:5;box-shadow:0 0 0 3px var(--brand-ring); }
.fb-palette-modal .fb-tiles{ grid-template-columns:repeat(3,minmax(0,1fr)); }
.fb-palette-modal .fb-tile{ cursor:pointer; }
svg.ico-xs{ width:12px;height:12px;vertical-align:-2px; }
