/**
 * پاپ‌آپ ورود با موبایل.
 *
 * این فایل روی همه‌ی صفحه‌ها بارگذاری می‌شود (دکمه در هدر است)، پس
 * عمداً کوچک است و فقط چیزی دارد که بدونش پاپ‌آپ *کار نمی‌کند*.
 */

/**
 * پاپ‌آپ به body چسبیده، بیرون از .woocommerce — پس هیچ‌کدام از
 * قاعده‌های عمومیِ قالب به آن نمی‌رسد، از جمله box-sizing.
 *
 * بدون این، ورودی با width:100% به‌علاوه‌ی ۳۲ پیکسل padding و ۲
 * پیکسل حاشیه از پاپ‌آپ بیرون می‌زد و ته کادر نوار اسکرول افقی
 * می‌ساخت.
 */
.nb-login,
.nb-login *,
.nb-login *::before,
.nb-login *::after {
	box-sizing: border-box;
}

/**
 * دو ظاهر با یک بدنه: پاپ‌آپ و فرمِ درون‌صفحه‌ی حساب کاربری.
 *
 * هر چه داخل کادر است مشترک می‌ماند؛ فقط پوسته فرق می‌کند. برای همین
 * تغییر ظاهرِ گام‌ها یک بار انجام می‌شود، نه دو بار.
 */
.nb-login {
	--nb-login-fg: var(--nb-fg, #e7e9ee);
	--nb-login-muted: var(--nb-muted, #98a2b3);

	direction: rtl;
	color: var(--nb-login-fg);
	font-family: inherit;
}

/**
 * مرورگر به input و button فونت را **ارث نمی‌دهد** و فونت سیستم
 * می‌گذارد؛ برای همین متن کادر و دکمه با بقیه‌ی سایت فرق داشت.
 *
 * inherit یعنی از .nb-login بگیر، که خودش فونت را از body ارث می‌برد.
 */
.nb-login input,
.nb-login button,
.nb-login select,
.nb-login textarea,
.nb-login-alt > summary {
	font-family: inherit;
}

.nb-login-alt {
	font-family: inherit;
}

.nb-login--modal {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 16px;
}

/**
 * فرم درون‌صفحه — یک صفحه‌ی ورودِ آرام، نه یک کادر گم‌شده در گوشه.
 *
 * float:none و clear:both عمدی‌اند: قالبِ ووکامرس روی همین صفحه
 * ستون‌های شناور (col2-set) دارد و بدون این دو، کادر ما کنارِ آن‌ها
 * می‌چسبید و از وسط بیرون می‌زد — همان چیزی که در عکس دیده شد.
 */
.nb-login--inline {
	display: block;
	float: none;
	clear: both;
	width: 100%;
	margin-block: 40px 12px;
}

/**
 * روی این قالب، ظرفِ .woocommerce یک **گرید** است.
 *
 * اندازه‌گیری‌شده: کادر ورود در ستون اول (۹۱۵ پیکسل) می‌نشست و بلوکِ
 * راه دوم در ستون دوم (۲۶۰ پیکسل) — برای همین یکی چپ بود و یکی راست،
 * و width:100% هم کاری نمی‌کرد چون عرض را خودِ ستون تعیین می‌کند.
 *
 * این دو خط هر دو را تمام‌عرض می‌کند. اگر ظرف گرید نباشد بی‌اثرند.
 */
.nb-login--inline,
.nb-login-alt {
	grid-column: 1 / -1;
	justify-self: stretch;
}

/**
 * کادرِ صفحه‌ی ورود از پاپ‌آپ پهن‌تر است.
 *
 * با ۳۴۸ پیکسل، راهنمای «شماره موبایل - - - - - - - - - 09» تا روی
 * آیکن می‌آمد و رویش می‌افتاد. پاپ‌آپ باریک می‌ماند چون آنجا این متن
 * جا دارد.
 */
.nb-login--inline .nb-login__panel {
	width: min(100%, 390px);
	margin-inline: auto;
	max-height: none;
	overflow: visible;
	padding: 24px 22px 20px;
	box-shadow: 0 10px 30px rgba(0, 0, 0, .25);
}

.nb-login--inline .nb-login__title,
.nb-login--inline .nb-login__hint {
	text-align: center;
	padding-inline-end: 0;
}

.nb-login .nb-login__home {
	display: block;
	width: fit-content;
	margin: 18px auto 0;
	padding: 8px 14px;
	color: var(--nb-login-muted);
	font-size: .78em;
	text-decoration: none;
	border-radius: var(--nb-radius-sm, 10px);
}

.nb-login .nb-login__home:hover {
	color: var(--nb-login-fg);
	background: rgba(255, 255, 255, .06);
	text-decoration: none;
}

/* ---------- فیلد شماره با آیکن ---------- */

.nb-login__field {
	position: relative;
	display: block;
}

/**
 * آیکن سمت چپِ کادر (پایانِ خط در راست‌به‌چپ) و متن راست‌چین —
 * همان چیدمانی که صاحب فروشگاه از صفحه‌ی ورود نبولار خواست.
 */
.nb-login__icon {
	position: absolute;
	inset-inline-end: 14px;
	inset-block-start: 50%;
	transform: translateY(-50%);
	width: 18px;
	height: 18px;
	pointer-events: none;
	fill: none;
	stroke: var(--nb-login-muted);
	stroke-width: 1.6;
	stroke-linecap: round;
}

/**
 * direction اینجا صریح است، نه ارثی.
 *
 * قالب روی input جهت ltr می‌گذارد، پس `text-align: start` به **چپ**
 * ترجمه می‌شد و راهنمای فارسی می‌رفت زیر آیکن — با اینکه اندازه‌گیری
 * می‌گفت متن جا دارد. رقم‌ها خودشان یک رشته‌ی چپ‌به‌راست‌اند و در
 * کادر راست‌به‌چپ درست چیده می‌شوند.
 */
.nb-login .nb-login__field .nb-login__input {
	padding-inline: 16px 48px;
	direction: rtl;
	text-align: right;
	letter-spacing: 0;
	font-weight: 500;
}

.nb-login .nb-login__field .nb-login__input::placeholder {
	letter-spacing: 0;
	font-size: .94em;
}

.nb-login[hidden] {
	display: none;
}

/* نام عمداً با گزینشگرِ دکمه‌ی بازکننده (nb-login-open) یکی نیست —
   ببین توضیح شنونده‌ی کلیک در login.js. فاصله‌ی انتهایی را جاوااسکریپت
   می‌گذارد تا صفحه با رفتن نوار اسکرول تکان نخورد. */
body.nb-login-lock {
	overflow: hidden;
}

.nb-login__backdrop {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .7);
	backdrop-filter: blur(3px);
}

.nb-login__panel {
	position: relative;
	width: min(100%, 348px);
	max-height: min(90vh, 640px);
	/* افقی هیچ‌وقت اسکرول نمی‌شود — فقط عمودی. */
	overflow: hidden auto;
	padding: 22px 20px 18px;
	border: 1px solid rgba(255, 255, 255, .1);
	border-radius: var(--nb-radius, 16px);
	background: #10151f;
	box-shadow: 0 24px 60px rgba(0, 0, 0, .6);
}

/* گزینشگر دوکلاسه: قالب قاعده‌ی `button { border:1px solid #c36 }`
   دارد و چون این دکمه type ندارد هم باز می‌گیردش. */
.nb-login .nb-login__x {
	position: absolute;
	inset-block-start: 12px;
	inset-inline-end: 12px;
	width: 34px;
	height: 34px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 22px;
	line-height: 1;
	cursor: pointer;
	color: inherit;
	background: rgba(255, 255, 255, .06);
	border: 0;
	border-radius: var(--nb-radius-sm, 10px);
}

.nb-login .nb-login__x:hover {
	background: rgba(255, 255, 255, .13);
	color: inherit;
}

.nb-login__title {
	margin: 0 0 6px;
	font-size: .98rem;
	font-weight: 700;
	padding-inline-end: 40px;
}

.nb-login__hint {
	margin: 0 0 16px;
	color: var(--nb-login-muted);
	font-size: .8em;
	line-height: 1.9;
}

.nb-login__test {
	color: var(--nb-status-pending, #fbbf24);
}

.nb-login__form {
	display: flex;
	flex-direction: column;
	gap: 9px;
}

.nb-login .nb-login__input {
	width: 100%;
	max-width: 100%;
	min-height: 44px;
	padding: 10px 14px;
	color: var(--nb-login-fg);
	font-size: .85rem;
	font-weight: 600;
	border: 1px solid rgba(255, 255, 255, .14);
	border-radius: var(--nb-radius-sm, 10px);
	background: rgba(255, 255, 255, .05);
	text-align: center;
	letter-spacing: 2px;
	font-variant-numeric: tabular-nums;
}

/* راهنمای داخل کادر نباید هم‌وزن خودِ عدد باشد */
.nb-login .nb-login__input::placeholder {
	color: var(--nb-login-muted);
	font-weight: 400;
	letter-spacing: 1px;
	opacity: .7;
}

/* شماره‌ی نامعتبر، همان لحظه دیده شود نه بعد از زدن دکمه */
.nb-login .nb-login__input.is-bad {
	border-color: var(--nb-status-cancelled, #f87171);
}

.nb-login .nb-login__input:focus {
	outline: none;
	border-color: var(--nb-primary, #720eec);
	background: rgba(255, 255, 255, .08);
}

/* ---------- خانه‌های کد ---------- */

/**
 * تعداد خانه‌ها از پنل می‌آید (۴ تا ۸)، پس عرض ثابت نمی‌دهیم:
 * grid با 1fr خودش تقسیم می‌کند و هشت خانه هم از کادر بیرون نمی‌زند.
 *
 * جهت ltr است تا رقم اول سمت چپ بیفتد، همان‌طور که در پیامک نوشته
 * شده؛ در rtl خانه‌ها برعکس پر می‌شدند.
 */
.nb-login__cells {
	display: grid;
	grid-auto-flow: column;
	/* سقف ۴۴ پیکسل ولی قابل کوچک شدن: با ۸ رقم هم از کادر بیرون
	   نمی‌زند، و با ۴ رقم کشیده و بدقواره نمی‌شود. */
	grid-auto-columns: minmax(0, 44px);
	justify-content: center;
	gap: 8px;
	direction: ltr;
	margin-block-end: 4px;
}

.nb-login .nb-login__cell {
	width: 100%;
	min-width: 0;
	height: 44px;
	padding: 0;
	color: var(--nb-login-fg);
	font-size: 1rem;
	font-weight: 700;
	text-align: center;
	font-variant-numeric: tabular-nums;
	border: 1px solid rgba(255, 255, 255, .14);
	border-radius: var(--nb-radius-sm, 10px);
	background: rgba(255, 255, 255, .05);
	transition: border-color .15s, background .15s;
}

.nb-login .nb-login__cell:focus {
	outline: none;
	border-color: var(--nb-primary, #720eec);
	background: rgba(255, 255, 255, .09);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--nb-primary, #720eec) 25%, transparent);
}

/* خانه‌ی پرشده باید از خالی جدا دیده شود. راهنمای خانه یک فاصله
   است، فقط برای همین گزینشگر — :valid اینجا کار نمی‌کند چون خانه
   هیچ محدودیتی ندارد و همیشه معتبر است. */
.nb-login .nb-login__cell:not(:placeholder-shown) {
	border-color: rgba(255, 255, 255, .3);
	background: rgba(255, 255, 255, .1);
}

/* دکمه‌ی خاموش با opacity هنوز بنفشِ پررنگ دیده می‌شد و کاربر فکر
   می‌کرد فعال است. رنگ عوض می‌شود، نه شفافیت. */
.nb-login .nb-login__btn:disabled {
	color: var(--nb-login-muted);
	background: rgba(255, 255, 255, .07);
	cursor: default;
	filter: none;
}

/* ---------- پاورقی: ارسال مجدد + ویرایش شماره ---------- */

.nb-login__foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	margin-block-start: 2px;
}

.nb-login .nb-login__again.is-ready {
	color: var(--nb-primary-soft, #b98cff);
	font-weight: 600;
}

.nb-login.is-busy .nb-login__cell {
	opacity: .6;
	pointer-events: none;
}

/* ---------- راه دومِ ورود، زیر فرم اصلی ---------- */

/**
 * <details> بومی است تا بدون جاوااسکریپت هم باز شود — کسی که JS
 * ندارد نباید از فروشگاه بیرون بماند.
 */
/**
 * خودِ <details> تمام‌عرض است ولی دستگیره‌اش هم‌اندازه‌ی کادر ورود.
 *
 * قبلاً کل بلوک ۳۴۸ پیکسل بود و فرم دو‌ستونیِ ووکامرس داخلش له می‌شد؛
 * و چون ستون‌های شناورِ ووکامرس روی همین صفحه‌اند، بدون clear کنارِ
 * کادر ورود می‌پرید.
 */
.nb-login-alt {
	float: none;
	clear: both;
	width: 100%;
	margin: 0 0 32px;
	direction: rtl;
}

.nb-login-alt > summary {
	cursor: pointer;
	list-style: none;
	max-width: 390px;
	margin-inline: auto;
	padding: 12px;
	text-align: center;
	font-size: .8em;
	color: var(--nb-muted, #98a2b3);
	border: 1px dashed rgba(255, 255, 255, .16);
	border-radius: var(--nb-radius-sm, 10px);
}

.nb-login-alt > summary::-webkit-details-marker {
	display: none;
}

.nb-login-alt > summary:hover {
	color: var(--nb-fg, #e7e9ee);
	border-color: rgba(255, 255, 255, .3);
}

.nb-login-alt[open] > summary {
	margin-block-end: 8px;
}

.nb-login .nb-login__btn {
	min-height: 42px;
	padding: 10px 12px;
	cursor: pointer;
	color: #fff;
	font-size: .85rem;
	font-weight: 700;
	border: 0;
	border-radius: var(--nb-radius-sm, 10px);
	background: var(--nb-primary, #720eec);
}

.nb-login .nb-login__btn:hover {
	color: #fff;
	filter: brightness(1.12);
}

/**
 * حالت «در حال کار» باید دیده شود.
 *
 * ارسال پیامک روی سایت زنده چند ثانیه طول می‌کشد؛ با یک دکمه‌ی صرفاً
 * کم‌رنگ، کاربر فکر می‌کند کلیکش نگرفته و دوباره می‌زند. چرخنده و متنِ
 * عوض‌شده همان چند ثانیه را قابل تحمل می‌کند.
 */
.nb-login .nb-login__btn.is-busy {
	cursor: wait;
	color: #fff;
	background: var(--nb-primary, #720eec);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
}

.nb-login .nb-login__btn.is-busy::before {
	content: "";
	width: 16px;
	height: 16px;
	border: 2px solid rgba(255, 255, 255, .35);
	border-top-color: #fff;
	border-radius: 50%;
	animation: nb-login-spin .7s linear infinite;
}

@keyframes nb-login-spin {
	to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
	.nb-login .nb-login__btn.is-busy::before {
		animation-duration: 2.4s;
	}
}

/**
 * نوار باریکِ بالای کادر — نشانه‌ی دومِ «دارد کار می‌کند».
 *
 * عمداً transform ندارد. نسخه‌ی قبلی با translateX(±۴۰٪) از کادر
 * بیرون می‌زد و چون کادر ظرفِ اسکرول است، یک **نوار اسکرول افقی**
 * می‌ساخت. اندازه‌گیری‌شده: scrollWidth 463 در برابر clientWidth 346.
 * جابه‌جایی حالا با background-position است که هیچ‌وقت سرریز نمی‌کند.
 */
.nb-login.is-busy .nb-login__panel::after {
	content: "";
	position: absolute;
	inset-block-start: 0;
	inset-inline: 0;
	height: 3px;
	border-radius: var(--nb-radius, 16px) var(--nb-radius, 16px) 0 0;
	background-image: linear-gradient(90deg, transparent 0%, var(--nb-primary, #720eec) 45%, var(--nb-primary-soft, #b98cff) 55%, transparent 100%);
	background-size: 240% 100%;
	background-repeat: no-repeat;
	animation: nb-login-sweep 1.2s linear infinite;
}

@keyframes nb-login-sweep {
	from { background-position: 120% 0; }
	to   { background-position: -120% 0; }
}

@media (prefers-reduced-motion: reduce) {
	.nb-login.is-busy .nb-login__panel::after {
		animation-duration: 3s;
	}
}

.nb-login .nb-login__again,
.nb-login .nb-login__back {
	min-height: 30px;
	cursor: pointer;
	color: var(--nb-login-muted);
	font-size: .76em;
	background: none;
	border: 0;
}

.nb-login .nb-login__again:disabled {
	cursor: default;
	opacity: .7;
}

.nb-login .nb-login__again:not(:disabled):hover,
.nb-login .nb-login__back:hover {
	color: var(--nb-login-fg);
}

.nb-login__err {
	margin: 0;
	color: var(--nb-status-cancelled, #f87171);
	font-size: .78em;
	line-height: 1.8;
}

/* ============================================================
 * جلوگیری از زوم خودکار روی آی‌اواس
 * ============================================================
 *
 * سافاری موبایل هر ورودی‌ای را که اندازه‌ی قلمش **زیر ۱۶ پیکسل** باشد
 * موقع فوکوس بزرگ‌نمایی می‌کند، و چون بعدش صفحه زوم‌شده می‌ماند، کل
 * چیدمان سایت به‌هم‌ریخته به نظر می‌رسد. ورودی شماره ۱۳٫۶ بود.
 *
 * راهِ سایت‌های دیگر این است که با
 * `maximum-scale=1, user-scalable=no` زوم را در کل صفحه قفل کنند —
 * که مشکل را می‌پوشاند ولی درشت‌نمایی را از کسی که واقعاً به آن نیاز
 * دارد هم می‌گیرد. ۱۶ پیکسل کردن ورودی، همان نتیجه را بدون آن هزینه
 * می‌دهد. (اگر باز هم قفلِ کامل را خواستی، سوییچش در پنل → کارایی است.)
 */
@media ( max-width: 767px ) {

	.nb-login .nb-login__input,
	.nb-login .nb-login__field .nb-login__input,
	.nb-login-alt input,
	.nb-login input[type="tel"],
	.nb-login input[type="text"],
	.nb-login input[type="number"] {
		font-size: 16px;
	}
}
