/* =====================================================================
   utilities.css — کلاس‌های کمکی محلی
   جایگزین کامل Tailwind CDN برای کلاس‌هایی که در نماهای پروژه استفاده شده‌اند.
   (آفلاین‌سازی کامل — هیچ وابستگی به اینترنت ندارد)
   ===================================================================== */

/* ---- Display ---- */
.flex{ display: flex; } .inline-flex{ display: inline-flex; }
.grid{ display: grid; } .hidden{ display: none !important; }
.block{ display: block; } .inline-block{ display: inline-block; }
.relative{ position: relative; } .absolute{ position: absolute; }
.fixed{ position: fixed; } .sticky{ position: sticky; }
.inset-0{ inset: 0; }
.top-0{ top: 0; }
.overflow-hidden{ overflow: hidden; }
.overflow-x-auto{ overflow-x: auto; }
.overflow-x-hidden{ overflow-x: hidden; }
.overflow-y-auto{ overflow-y: auto; }
.min-h-screen{ min-height: 100vh; }
.h-screen{ height: 100vh; }
.w-full{ width: 100%; }
.max-w-xs{ max-width: 320px; } .max-w-sm{ max-width: 384px; }
.max-w-md{ max-width: 448px; } .max-w-xl{ max-width: 576px; }
.max-w-2xl{ max-width: 672px; }
.flex-1{ flex: 1 1 0%; } .flex-shrink-0{ flex-shrink: 0; }
.min-w-0{ min-width: 0; }
.z-50{ z-index: 50; }

/* ---- Flex / Grid alignment ---- */
.flex-col{ flex-direction: column; }
.flex-wrap{ flex-wrap: wrap; }
.items-center{ align-items: center; } .items-start{ align-items: flex-start; } .items-end{ align-items: flex-end; }
.justify-center{ justify-content: center; } .justify-between{ justify-content: space-between; } .justify-end{ justify-content: flex-end; }
.gap-1{ gap: 4px; } .gap-1\.5{ gap: 6px; } .gap-2{ gap: 8px; } .gap-3{ gap: 12px; }
.gap-4{ gap: 16px; } .gap-5{ gap: 20px; } .gap-6{ gap: 24px; }
.space-y-1 > * + *{ margin-top: 4px; } .space-y-2 > * + *{ margin-top: 8px; }
.space-y-3 > * + *{ margin-top: 12px; } .space-y-4 > * + *{ margin-top: 16px; } .space-y-5 > * + *{ margin-top: 20px; }
.divide-y > * + *{ border-top: 1px solid var(--border-color); }
.divide-gray-50 > * + *{ border-top: 1px solid var(--gray-100); }

.grid-cols-1{ grid-template-columns: repeat(1,minmax(0,1fr)); }
.grid-cols-2{ grid-template-columns: repeat(2,minmax(0,1fr)); }
@media (min-width: 768px){
  .sm\:grid-cols-2{ grid-template-columns: repeat(2,minmax(0,1fr)); }
.sm\:grid-cols-3{ grid-template-columns: repeat(3,minmax(0,1fr)); }
.sm\:grid-cols-4{ grid-template-columns: repeat(4,minmax(0,1fr)); }
.md\:grid-cols-2{ grid-template-columns: repeat(2,minmax(0,1fr)); }
  .md\:grid-cols-3{ grid-template-columns: repeat(3,minmax(0,1fr)); }
  .md\:grid-cols-4{ grid-template-columns: repeat(4,minmax(0,1fr)); }
  .md\:col-span-2{ grid-column: span 2 / span 2; }
}
@media (min-width: 1024px){
  .lg\:grid-cols-2{ grid-template-columns: repeat(2,minmax(0,1fr)); }
  .lg\:grid-cols-3{ grid-template-columns: repeat(3,minmax(0,1fr)); }
  .lg\:grid-cols-4{ grid-template-columns: repeat(4,minmax(0,1fr)); }
.md\:grid-cols-12{ grid-template-columns: repeat(12,minmax(0,1fr)); }

  .lg\:grid-cols-12{ grid-template-columns: repeat(12,minmax(0,1fr)); }
  .lg\:col-span-2{ grid-column: span 2 / span 2; }
  .lg\:col-span-4{ grid-column: span 4 / span 4; }
  .lg\:col-span-5{ grid-column: span 5 / span 5; }
  .lg\:col-span-7{ grid-column: span 7 / span 7; }
  .lg\:col-span-8{ grid-column: span 8 / span 8; }
}
.col-span-3{ grid-column: span 3 / span 3; }

/* پوشش‌دهنده فاصله‌گذاری فرم (form-group) — معادل ساده‌تر .mb-4 روی input های پشت‌سرهم */
.form-group{ margin-bottom: var(--sp-4); }

/* ---- Spacing ---- */
.p-0{padding:0;} .p-1{padding:4px;} .p-2{padding:8px;} .p-3{padding:12px;}
.p-4{padding:16px;} .p-5{padding:20px;} .p-6{padding:24px;} .p-8{padding:32px;}
.px-1{padding-inline:4px;} .px-2{padding-inline:8px;} .px-3{padding-inline:12px;}
.px-4{padding-inline:16px;} .px-5{padding-inline:20px;} .px-6{padding-inline:24px;}
.py-1{padding-block:4px;} .py-1\.5{padding-block:6px;} .py-2{padding-block:8px;}
.py-2\.5{padding-block:10px;} .py-3{padding-block:12px;} .py-3\.5{padding-block:14px;}
.py-4{padding-block:16px;} .py-6{padding-block:24px;} .py-8{padding-block:32px;} .py-10{padding-block:40px;}
.pb-2{padding-bottom:8px;} .pb-3{padding-bottom:12px;} .pb-6{padding-bottom:24px;}
.pt-4{padding-top:16px;}
.m-0{margin:0;} .mx-auto{margin-inline:auto;}
.mt-0\.5{margin-top:2px;} .mt-1{margin-top:4px;} .mt-1\.5{margin-top:6px;}
.mt-2{margin-top:8px;} .mt-3{margin-top:12px;} .mt-4{margin-top:16px;} .mt-5{margin-top:20px;} .mt-6{margin-top:24px;}
.my-4{margin-block:16px;}
.mb-0\.5{margin-bottom:2px;} .mb-1{margin-bottom:4px;} .mb-2{margin-bottom:8px;}
.mb-3{margin-bottom:12px;} .mb-4{margin-bottom:16px;} .mb-5{margin-bottom:20px;} .mb-6{margin-bottom:24px;}
.mr-1{margin-inline-start:4px;} .mr-auto{margin-inline-start:auto;}
.ml-1{margin-inline-end:4px;}
.ml-auto{margin-inline-end:auto;}

/* ---- Sizing ---- */
.w-2{width:8px;} .w-8{width:32px;} .w-9{width:36px;} .w-10{width:40px;} .w-12{width:48px;} .w-14{width:56px;} .w-20{width:80px;} .w-32{width:128px;} .w-48{width:192px;} .w-56{width:224px;} .w-60{width:240px;}
.h-1{height:4px;} .h-1\.5{height:6px;} .h-2{height:8px;} .h-8{height:32px;} .h-9{height:36px;} .h-10{height:40px;} .h-12{height:48px;} .h-14{height:56px;} .h-96{height:384px;}

/* ---- Typography ---- */
.text-xs{font-size:11.5px;} .text-sm{font-size:13px;} .text-base{font-size:14.5px;}
.text-lg{font-size:17px;} .text-xl{font-size:20px;} .text-2xl{font-size:24px;} .text-3xl{font-size:30px;} .text-4xl{font-size:38px;}
.font-normal{font-weight:400;} .font-medium{font-weight:500;} .font-semibold{font-weight:600;} .font-bold{font-weight:700;}
.text-center{text-align:center;} .text-left{text-align:left;} .text-right{text-align:right;}
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.whitespace-nowrap{white-space:nowrap;}
.list-disc{list-style-type:disc;}
.list-inside{list-style-position:inside;}
.leading-5{line-height:1.45;} .leading-6{line-height:1.6;} .leading-7{line-height:1.75;}
.italic{font-style:italic;}
.font-mono{font-family:'SFMono-Regular',Consolas,'Courier New',monospace; direction:ltr; unicode-bidi:plaintext;}
.tracking-widest{letter-spacing:.06em;}
.select-all{user-select:all;}
.uppercase{text-transform:uppercase;}

/* ---- Colors (text) — برای fallback نشانه‌های وضعیت داخل متن خام ---- */
.text-white{color:#fff;}
.text-gray-400{color:var(--gray-400);} .text-gray-500{color:var(--gray-500);}
.text-gray-600{color:var(--gray-600);} .text-gray-700{color:var(--gray-700);} .text-gray-800{color:var(--gray-800);}
.text-blue-600{color:var(--color-primary-700);} .text-blue-700{color:var(--color-primary-700);} .text-blue-800{color:var(--color-primary-700);}
.text-green-600{color:var(--success-600);} .text-green-700{color:var(--success-700);} .text-green-800{color:var(--success-700);}
.text-red-400{color:var(--danger-500);opacity:.8;} .text-red-500{color:var(--danger-500);} .text-red-600{color:var(--danger-600);} .text-red-700{color:var(--danger-700);} .text-red-800{color:var(--danger-700);}
.text-orange-500{color:var(--warning-500);} .text-orange-600{color:var(--warning-600);} .text-orange-700{color:var(--warning-700);} .text-orange-800{color:var(--warning-700);}
.text-yellow-700{color:var(--warning-700);} .text-yellow-800{color:var(--warning-700);}
.text-purple-600{color:var(--purple-600);}
.text-indigo-600{color:var(--color-primary-700);} .text-indigo-700{color:var(--color-primary-700);} .text-indigo-800{color:var(--color-primary-700);}
.text-amber-700{color:var(--warning-700);}
.text-gray-300{color:var(--gray-300);}

/* ---- Backgrounds (soft, kept for inline-styled legacy blocks) ---- */
.bg-white{background:var(--surface);}
.bg-gray-50{background:var(--surface-muted);} .bg-gray-100{background:var(--gray-100);} .bg-gray-200{background:var(--gray-200);}
.bg-blue-50{background:var(--color-primary-50);} .bg-blue-100{background:var(--color-primary-100);} .bg-blue-600{background:var(--color-primary);} .bg-blue-700{background:var(--color-primary-700);}
.bg-green-50{background:var(--success-50);} .bg-green-100{background:var(--success-50);} .bg-green-600{background:var(--success-500);}
.bg-red-50{background:var(--danger-50);} .bg-red-100{background:var(--danger-50);} .bg-red-600{background:var(--danger-500);} .bg-red-900{background:var(--danger-700);} .bg-red-950{background:var(--danger-700);}
.bg-orange-50{background:var(--warning-50);} .bg-orange-100{background:var(--warning-50);} .bg-orange-500{background:var(--warning-500);} .bg-orange-600{background:var(--warning-600);}
.bg-yellow-50{background:var(--warning-50);} .bg-yellow-100{background:var(--warning-50);}
.bg-indigo-50{background:var(--color-primary-50);} .bg-indigo-100{background:var(--color-primary-100);} .bg-indigo-700{background:var(--color-primary-700);}
.bg-purple-50{background:var(--purple-50);} .bg-purple-100{background:var(--purple-50);}
.bg-amber-50{background:var(--warning-50);}
.bg-pink-600{background:#d9468f;}
.bg-gray-900{background:var(--gray-900);}
.hover\:bg-gray-50:hover{background:var(--surface-muted);}
.hover\:bg-gray-100:hover{background:var(--gray-100);}
.hover\:bg-gray-200:hover{background:var(--gray-200);}
.hover\:bg-gray-300:hover{background:var(--gray-300);}
.hover\:bg-blue-700:hover{background:var(--color-primary-700);}
.hover\:bg-green-700:hover{background:var(--success-700);}
.hover\:bg-red-700:hover{background:var(--danger-700);}
.hover\:bg-red-950:hover{background:var(--danger-700);}
.hover\:bg-orange-700:hover{background:var(--warning-700);}
.hover\:bg-yellow-700:hover{background:var(--warning-700);}
.hover\:bg-pink-700:hover{background:#bf3c7c;}
.hover\:underline:hover{text-decoration:underline;}

/* ---- Borders ---- */
.border{border:1px solid var(--border-color);} .border-t{border-top:1px solid var(--border-color);}
.border-b{border-bottom:1px solid var(--border-color);} .border-2{border-width:2px;}
.border-gray-100{border-color:var(--border-color);} .border-gray-200{border-color:var(--gray-200);} .border-gray-300{border-color:var(--gray-300);}
.border-blue-200{border-color:var(--color-primary-100);} .border-blue-300{border-color:var(--color-primary-100);} .border-blue-400{border-color:var(--color-accent);} .border-blue-500{border-color:var(--color-primary);} .border-blue-600{border-color:var(--color-primary);}
.border-green-200{border-color:var(--success-50);} .border-green-300{border-color:var(--success-50);} .border-green-500{border-color:var(--success-500);}
.border-red-200{border-color:var(--danger-50);} .border-red-300{border-color:var(--danger-50);} .border-red-500{border-color:var(--danger-500);}
.border-orange-200{border-color:var(--warning-50);} .border-orange-300{border-color:var(--warning-50);} .border-orange-400{border-color:var(--warning-500);}
.border-yellow-200{border-color:var(--warning-50);} .border-yellow-300{border-color:var(--warning-50);}
.border-amber-200{border-color:var(--warning-50);}
.border-purple-200{border-color:var(--purple-50);}
.border-indigo-200{border-color:var(--color-primary-100);}
.border-r-4{border-inline-start:4px solid;}
.rounded{border-radius:var(--radius-sm);} .rounded-lg{border-radius:var(--radius-md);}
.rounded-xl{border-radius:var(--radius-lg);} .rounded-2xl{border-radius:var(--radius-xl);}
.rounded-full{border-radius:var(--radius-full);}

/* ---- Effects ---- */
.shadow{box-shadow:var(--shadow-sm);} .shadow-sm{box-shadow:var(--shadow-xs);} .shadow-lg{box-shadow:var(--shadow-lg);} .shadow-2xl{box-shadow:var(--shadow-xl);}
.transition-colors{transition:background-color var(--t-fast), color var(--t-fast), border-color var(--t-fast);}
.cursor-pointer{cursor:pointer;}
.opacity-50{opacity:.5;} .opacity-60{opacity:.6;}

/* ---- Misc width helpers used inline ---- */
.min-w-28{min-width:112px;} .min-w-40{min-width:160px;} .min-w-56{min-width:224px;}

@media (min-width: 640px){ .sm\:block{ display:block; } }

[dir="rtl"] .text-left{ text-align: right; }
