/*
 * پوستهٔ باشگاه مشتریان — روشن و تیره، موبایل تا دسکتاپ.
 *
 * ⚠ این پرونده در هر سه حالتِ رندر بار می‌شود: سندِ ایزوله، جاسازی داخلِ قالبِ خریدار،
 * و شورت‌کد. پس **هیچ** قاعده‌ای روی html، body، :root یا عنصرِ برهنه نوشته نمی‌شود؛
 * همه‌چیز زیرِ ریشهٔ `.dmlty-app` است. قاعده‌های سطحِ سند فقط در سندِ ایزوله و از
 * Front\Theme::document_css() می‌آیند.
 *
 * ⚠ رنگ‌های برند از متغیرهایی می‌آیند که سرور چاپ می‌کند (Front\Theme::css_vars) و
 * خریدار از پنل تنظیمشان می‌کند. هیچ رنگِ برندی مستقیم اینجا نوشته نمی‌شود؛ آنچه
 * اینجاست فقط نگاشتِ روشن/تیره و رنگ‌های خنثاست.
 *
 * چیدمان: موبایل تا ۷۶۷ یک ستون با نوارِ پایین · تبلت ۷۶۸ تا ۱۰۲۳ دو ستون با همان
 * نوارِ پایین · دسکتاپ از ۱۰۲۴ ستونِ کناری و بدونِ نوارِ پایین · ۱۲۸۰ به بالا سه ستون.
 */

/* قلم درونِ خودِ افزونه است، نه از شبکهٔ توزیع: سایتِ خریدار نباید برای دیده‌شدنِ
   درستِ پنل به سرورِ کسِ دیگری وابسته باشد. */
@font-face {
	font-family: Vazirmatn;
	src: url("../fonts/Vazirmatn-Regular.woff2") format("woff2");
	font-weight: 400;
	font-display: swap;
	font-style: normal;
}

@font-face {
	font-family: Vazirmatn;
	src: url("../fonts/Vazirmatn-Bold.woff2") format("woff2");
	font-weight: 700;
	font-display: swap;
	font-style: normal;
}

/* ═══════════════════════════════ توکن‌ها ═══════════════════════════════ */

/*
 * ⚠ پالتِ روشن روی خودِ `.dmlty-app` تعریف می‌شود، نه `:root`. در سندِ ایزوله این
 * کلاس روی `<body>` است و همه‌چیز زیرِ آن؛ در حالتِ جاسازی‌شده پوششِ ماست. یک
 * تعریفِ `:root` آنجا متغیرهای ما را روی سندِ خریدار می‌نشاند.
 */
.dmlty-app {
	/*
	 * رنگ‌های خامِ برند — همان چیزی که سرور می‌نویسد و خریدار در تنظیمات انتخابش
	 * می‌کند.
	 *
	 * ⚠ این‌ها **هرگز** در هیچ پوسته‌ای بازنویسی نمی‌شوند و هیچ‌جا مستقیم مصرف
	 * نمی‌شوند. رنگِ مصرفی `--dmlty-brand` است که پایین‌تر از روی همین‌ها ساخته
	 * می‌شود. دلیلش یک خرابیِ واقعی است: پیش از این پوستهٔ تیره خودِ
	 * `--dmlty-brand` را با مقداری بازنویسی می‌کرد که خودش از `--dmlty-brand`
	 * ساخته شده بود — یک **حلقهٔ ارجاع**. طبق مشخصات، هر متغیرِ داخلِ حلقه
	 * «نامعتبر در زمانِ محاسبه» می‌شود، پس هر قاعده‌ای که آن را می‌خواند به مقدارِ
	 * اولیه می‌افتاد: زمینه‌ها شفاف و رنگ‌ها پریده. در پوستهٔ روشن هیچ اثری نداشت
	 * و فقط در تیره دیده می‌شد، بدونِ یک خط خطا در کنسول.
	 */
	--dmlty-brand-base: #5b46f2;
	--dmlty-brand-2-base: #8b6cff;

	--dmlty-accent: #ef3e63;
	--dmlty-ink: #131327;
	--dmlty-radius: 18px;

	/* رنگِ مصرفی. در پوستهٔ روشن همان رنگِ خام است. */
	--dmlty-brand: var(--dmlty-brand-base);
	--dmlty-brand-2: var(--dmlty-brand-2-base);

	/* ⚠ اعلانِ دوم برای مرورگرهای بدونِ color-mix نامعتبر است و نادیده گرفته
	   می‌شود، پس همان مقدارِ اول سرِ جایش می‌ماند — افت، نه شکست. */
	--dmlty-tint: rgba(91, 70, 242, 0.1);
	--dmlty-tint: color-mix(in srgb, var(--dmlty-brand) 10%, transparent);
	--dmlty-tint-2: rgba(91, 70, 242, 0.18);
	--dmlty-tint-2: color-mix(in srgb, var(--dmlty-brand) 18%, transparent);

	--dmlty-on-brand: #fff;

	/* سطح‌ها و متن — پوستهٔ روشن. */
	--dmlty-bg: #f4f5fa;
	--dmlty-surface: #fff;
	--dmlty-surface-2: #f7f8fd;
	--dmlty-surface-3: #eef0f8;
	--dmlty-line: #e7e8f2;
	--dmlty-line-soft: #eff0f7;
	--dmlty-text: var(--dmlty-ink);
	--dmlty-muted: #7a7d99;

	--dmlty-ok: #2f9e6a;
	--dmlty-ok-bg: rgba(47, 158, 106, 0.12);
	--dmlty-warn: #c8791a;
	--dmlty-warn-bg: rgba(200, 121, 26, 0.12);
	--dmlty-danger: #d24a63;
	--dmlty-danger-bg: rgba(210, 74, 99, 0.12);

	--dmlty-shadow-sm: 0 1px 2px rgba(19, 19, 39, 0.05);
	--dmlty-shadow: 0 2px 10px rgba(19, 19, 39, 0.06);
	--dmlty-shadow-lg: 0 12px 32px rgba(19, 19, 39, 0.1);

	--dmlty-radius-ctl: 11px;
	--dmlty-radius-pill: 999px;

	/* مقیاسِ فاصله — نه فشرده، نه پراکنده. کلِ ریتمِ صفحه از همین چهار عدد می‌آید. */
	--dmlty-gap-xs: 6px;
	--dmlty-gap-sm: 10px;
	--dmlty-gap: 16px;
	--dmlty-gap-lg: 24px;

	--dmlty-pad: 16px;
	--dmlty-card-pad: 16px;

	--dmlty-tab-h: 62px;
	--dmlty-side-w: 264px;
	--dmlty-max: 620px;

	--dmlty-font: Vazirmatn, IRANSansX, Tahoma, Arial, sans-serif;
}

/*
 * پوستهٔ تیره.
 *
 * ⚠ سه نقطهٔ ورود، و هر سه لازم است: صفتِ صریح روی خودِ پوشش (حالتِ جاسازی‌شده)،
 * صفتِ صریح روی سندِ ایزوله، و ترجیحِ سیستمی وقتی کاربر هنوز چیزی انتخاب نکرده.
 * حالتِ سوم با «مگر اینکه روشن انتخاب شده باشد» مهار می‌شود، وگرنه انتخابِ صریحِ
 * «روشن» روی دستگاهی که سیستمش تیره است بی‌اثر می‌ماند.
 *
 * ⚠ رنگِ متنِ خریدار (ink) اینجا کنار گذاشته می‌شود و به جایش متنِ روشن می‌نشیند:
 * تنظیمِ او برای زمینهٔ سفید انتخاب شده و روی زمینهٔ تیره ناخوانا می‌شود.
 */
.dmlty-app[data-dmlty-theme="dark"],
[data-dmlty-theme="dark"] .dmlty-app {
	--dmlty-bg: #0d0d18;
	--dmlty-surface: #16162a;
	--dmlty-surface-2: #1c1c33;
	--dmlty-surface-3: #23233f;
	--dmlty-line: #2a2a48;
	--dmlty-line-soft: #21213a;
	--dmlty-text: #e9e9f4;
	--dmlty-muted: #9a9ab8;

	/* رنگِ برند روی زمینهٔ تیره کم‌جان می‌شود؛ نسخهٔ روشن‌ترش از روی رنگِ **خام**
	   ساخته می‌شود، نه از روی خودِ رنگِ مصرفی — وگرنه حلقهٔ ارجاع می‌شود. */
	--dmlty-brand: #8b7cff;
	--dmlty-brand: color-mix(in oklab, var(--dmlty-brand-base) 68%, #fff);
	--dmlty-brand-2: #a99cff;
	--dmlty-brand-2: color-mix(in oklab, var(--dmlty-brand-2-base) 60%, #fff);

	--dmlty-tint: rgba(139, 124, 255, 0.16);
	--dmlty-tint: color-mix(in srgb, var(--dmlty-brand) 16%, transparent);
	--dmlty-tint-2: rgba(139, 124, 255, 0.26);
	--dmlty-tint-2: color-mix(in srgb, var(--dmlty-brand) 26%, transparent);

	--dmlty-ok-bg: rgba(47, 158, 106, 0.2);
	--dmlty-warn-bg: rgba(200, 121, 26, 0.2);
	--dmlty-danger-bg: rgba(210, 74, 99, 0.2);

	--dmlty-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
	--dmlty-shadow: 0 2px 12px rgba(0, 0, 0, 0.45);
	--dmlty-shadow-lg: 0 14px 36px rgba(0, 0, 0, 0.55);
}

@media (prefers-color-scheme: dark) {
	/*
	 * ⚠ نگهبان باید **سند** را هم ببیند، نه فقط پوششِ اپ. خطای واقعیِ گزارش‌شده:
	 * اسکریپتِ پیش از رنگ‌آمیزی در `<head>` اجرا می‌شود و آنجا هنوز پوششی وجود ندارد،
	 * پس فقط سند صفت می‌گیرد. نگهبانی که تنها پوشش را می‌سنجید، در هر بارگذاریِ تازه
	 * «هیچ انتخابی نشده» می‌خواند و روی دستگاهی که سیستمش تیره است پوستهٔ تیره را
	 * برمی‌گرداند — یعنی انتخابِ «روشن» با هر جابه‌جایی بین تب‌ها پاک می‌شد.
	 */
	:root:not([data-dmlty-theme]) .dmlty-app:not([data-dmlty-theme="light"]):not([data-dmlty-theme="dark"]) {
		--dmlty-bg: #0d0d18;
		--dmlty-surface: #16162a;
		--dmlty-surface-2: #1c1c33;
		--dmlty-surface-3: #23233f;
		--dmlty-line: #2a2a48;
		--dmlty-line-soft: #21213a;
		--dmlty-text: #e9e9f4;
		--dmlty-muted: #9a9ab8;

		/* همان قاعدهٔ بالا: از رنگِ **خام** ساخته می‌شود، نه از رنگِ مصرفی. */
		--dmlty-brand: #8b7cff;
		--dmlty-brand: color-mix(in oklab, var(--dmlty-brand-base) 68%, #fff);
		--dmlty-brand-2: #a99cff;
		--dmlty-brand-2: color-mix(in oklab, var(--dmlty-brand-2-base) 60%, #fff);

		--dmlty-tint: rgba(139, 124, 255, 0.16);
		--dmlty-tint: color-mix(in srgb, var(--dmlty-brand) 16%, transparent);
		--dmlty-tint-2: rgba(139, 124, 255, 0.26);
		--dmlty-tint-2: color-mix(in srgb, var(--dmlty-brand) 26%, transparent);

		--dmlty-ok-bg: rgba(47, 158, 106, 0.2);
		--dmlty-warn-bg: rgba(200, 121, 26, 0.2);
		--dmlty-danger-bg: rgba(210, 74, 99, 0.2);

		--dmlty-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
		--dmlty-shadow: 0 2px 12px rgba(0, 0, 0, 0.45);
		--dmlty-shadow-lg: 0 14px 36px rgba(0, 0, 0, 0.55);
	}
}

/* ═══════════════════════════════ بازنشانی ═══════════════════════════════ */

/* ⚠ زیرِ ریشهٔ خودمان اسکوپ است، نه `*` سراسری: همین پرونده داخلِ قالبِ خریدار هم
   بار می‌شود و یک بازنشانیِ سراسری آنجا چیدمانِ کلِ سایتِ او را جابه‌جا می‌کند. */
.dmlty-app,
.dmlty-app *,
.dmlty-app *::before,
.dmlty-app *::after {
	box-sizing: border-box;
}

.dmlty-app {
	margin: 0;
	background: var(--dmlty-bg);
	color: var(--dmlty-text);
	font-family: var(--dmlty-font);
	font-size: 14px;
	line-height: 1.85;

	/* ⚠ راست‌چینی را خودمان اعلام می‌کنیم و به زبانِ سایتِ خریدار تکیه نمی‌کنیم:
	   روی نصبی که پیشخوانش انگلیسی است هر بندِ فارسی چپ‌چین می‌افتد و نقطهٔ پایانِ
	   جمله سرِ سطر می‌پرد، بدونِ اینکه جایی خطایی بدهد. */
	direction: rtl;
	text-align: start;

	-webkit-text-size-adjust: 100%;
	-webkit-font-smoothing: antialiased;
}

/* ⚠ صفتِ hidden امتیازِ ۰-۱-۰ دارد و به هر کلاسی که display بدهد می‌بازد؛ بدونِ این،
   عنصری که اسکریپت پنهانش کرده کاملاً دیده می‌ماند و هیچ خطایی هم نمی‌دهد. */
.dmlty-app [hidden] {
	display: none !important;
}

.dmlty-app img {
	max-inline-size: 100%;
	block-size: auto;
}

/*
 * ⚠ رشتهٔ بی‌فاصله سرریزِ افقی می‌سازد و روی موبایل کلِ صفحه را می‌لغزاند: نشانیِ
 * لینکِ دعوت، کدِ تخفیف، نامِ کاربریِ لاتین، شمارهٔ سفارشِ بلند. شکستنِ آخرین‌راه‌حل
 * روی هر متنِ پنل روشن است تا هیچ‌کدام قابِ نمایشگر را نشکند.
 */
/* ⚠ یک اعلان روی ریشه کافی است چون این ویژگی ارث می‌رسد؛ انتخابگرِ عنصرِ برهنه
   (`.dmlty-app span`) عمداً نوشته نشد — امتیازش از کلاسِ خودِ همان فرزند بالاتر است
   و روزی قاعده‌ای را که نباید، می‌بلعد. */
.dmlty-app {
	overflow-wrap: anywhere;
}

.dmlty-app svg {
	flex: none;
}

/*
 * ⚠ بازنشانیِ پیوند داخلِ `:where()` است و این **رفعِ یک خطای واقعی** است، نه سلیقه.
 *
 * `.dmlty-app a` امتیازِ ۰-۱-۱ دارد و `.dmlty-btn` امتیازِ ۰-۱-۰. یعنی هر دکمه‌ای که
 * یک `<a>` بود رنگِ متنش را از این بازنشانی می‌گرفت نه از کلاسِ خودش: دکمهٔ بنفش با
 * متنِ تیره، در حالی که همان کلاس روی `<button>` سفید بود. هیچ خطایی هم نمی‌داد و
 * فقط «زشت» به نظر می‌رسید.
 *
 * `:where()` امتیاز را صفر می‌کند، پس هر کلاسی بر آن می‌چربد — همان چیزی که از یک
 * بازنشانی انتظار می‌رود.
 */
:where(.dmlty-app a) {
	color: inherit;
	text-decoration: none;
}

.dmlty-app a:not([class]) {
	color: var(--dmlty-brand);
	text-decoration: underline;
}

.dmlty-app .screen-reader-text {
	position: absolute;
	inline-size: 1px;
	block-size: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

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

/* ═══════════════════════════════ پوسته ═══════════════════════════════ */

/*
 * ⚠ `overflow-x: clip` نگهبانِ آخر است، نه راه‌حل.
 *
 * هر سرریزِ افقی روی موبایل کلِ صفحه را می‌لغزاند و نوارِ ثابتِ پایین را از قاب بیرون
 * می‌برد — دقیقاً همان خرابی‌ای که یک بار دیده شد. علتِ هر سرریز جداگانه درست شده،
 * ولی این خط تضمین می‌کند یک تصویرِ پهن یا یک رشتهٔ بی‌فاصله در آینده همان خرابی را
 * دوباره نسازد. `clip` انتخاب شد نه `hidden`: ناحیهٔ لغزشِ تازه نمی‌سازد، پس چسبندگیِ
 * سربرگ و ستونِ کناری را نمی‌شکند.
 */
.dmlty-shell,
.dmlty-app-embedded {
	max-inline-size: 100%;
	overflow-x: clip;
}

.dmlty-shell {
	min-block-size: 100dvh;
	background: var(--dmlty-bg);
}

.dmlty-main {
	max-inline-size: var(--dmlty-max);
	margin-inline: auto;
	padding: var(--dmlty-pad);

	/* جا برای نوارِ پایینِ ثابت به‌علاوهٔ ناحیهٔ امنِ دستگاه. */
	padding-block-end: calc(var(--dmlty-tab-h) + var(--dmlty-pad) + env(safe-area-inset-bottom));

	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap);
}

/* ═══════════════════════════════ سربرگ ═══════════════════════════════ */

.dmlty-topbar {
	position: sticky;
	inset-block-start: 0;
	z-index: 20;

	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--dmlty-gap-sm);

	padding: 10px var(--dmlty-pad);
	padding-block-start: calc(10px + env(safe-area-inset-top));

	background: var(--dmlty-surface);
	border-block-end: 1px solid var(--dmlty-line);
}

/* ⚠ داخلِ قالبِ خریدار هیچ چیزی نمی‌چسبد: سربرگِ چسبانِ ما با سربرگِ چسبانِ خودِ
   قالب می‌جنگد و نوارِ ثابت روی محتوای او می‌افتد. */
.dmlty-topbar-static {
	position: static;
	padding-block: 12px;
}

.dmlty-topbar-start {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	min-inline-size: 0;
	flex: 1 1 auto;
}

.dmlty-topbar-title {
	font-size: 16px;
	font-weight: 700;
	color: var(--dmlty-text);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	min-inline-size: 0;
}

/* ⚠ اجازهٔ کوچک‌شدن دارد. با `flex:none` این ردیف روی نمایشگرِ باریک سربرگ را از
   قابِ صفحه بیرون می‌برد و کلِ سند افقی می‌لغزد. */
.dmlty-topbar-end {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	flex: 0 1 auto;
	min-inline-size: 0;
}

.dmlty-topbar-logo {
	display: inline-flex;
	flex: none;
}

.dmlty-topbar-logo img {
	block-size: 30px;
	inline-size: auto;
	border-radius: 8px;
	object-fit: contain;
}

.dmlty-back {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 34px;
	block-size: 34px;
	flex: none;
	border-radius: var(--dmlty-radius-ctl);
	color: var(--dmlty-text);
	background: var(--dmlty-surface-3);
}

/*
 * پیکانِ بازگشت در راست‌به‌چپ به **راست** اشاره می‌کند — همان جهتی که «برگرد» است.
 *
 * ⚠ مسیرِ خودِ نشانه از پیش به راست اشاره می‌کند، پس هیچ آینه‌ای لازم ندارد. آینهٔ
 * پیشین دقیقاً برعکسش می‌کرد.
 */
.dmlty-back-icon {
	display: inline-flex;
}

/* دکمه‌های نشانه‌ایِ سربرگ: زنگوله و کلیدِ پوسته، یک اندازه و یک شکل. */
.dmlty-iconbtn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 36px;
	block-size: 36px;
	flex: none;
	padding: 0;
	border: 0;
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-3);
	color: var(--dmlty-text);
	cursor: pointer;
	font: inherit;
}

.dmlty-iconbtn:hover {
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-bell.has-unread {
	color: var(--dmlty-brand);
	background: var(--dmlty-tint);
}

.dmlty-topbar-avatar {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 36px;
	block-size: 36px;
	flex: none;
	overflow: hidden;
	border-radius: 50%;
	border: 1px solid var(--dmlty-line);
}

.dmlty-topbar-avatar img,
.dmlty-topbar-avatar .dmlty-avatar-letter {
	inline-size: 100%;
	block-size: 100%;
	object-fit: cover;
}

.dmlty-topbar-avatar .dmlty-avatar-letter {
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
	font-weight: 700;
	font-size: 13px;
}

.dmlty-bell-badge {
	position: absolute;
	inset-block-start: -3px;
	inset-inline-start: -3px;
	min-inline-size: 17px;
	block-size: 17px;
	padding-inline: 4px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-accent);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	line-height: 17px;
	text-align: center;
}

/* کلیدِ پوسته: هر بار فقط یکی از دو نشانه دیده می‌شود — همانی که به آن سوییچ می‌کنی. */
.dmlty-theme-moon {
	display: inline-flex;
}

.dmlty-theme-sun {
	display: none;
}

.dmlty-app[data-dmlty-theme="dark"] .dmlty-theme-moon,
[data-dmlty-theme="dark"] .dmlty-app .dmlty-theme-moon {
	display: none;
}

.dmlty-app[data-dmlty-theme="dark"] .dmlty-theme-sun,
[data-dmlty-theme="dark"] .dmlty-app .dmlty-theme-sun {
	display: inline-flex;
}

/* همان نگهبانِ سه‌بخشیِ بالا؛ وگرنه نشانهٔ کلید با پوستهٔ واقعی نمی‌خواند. */
@media (prefers-color-scheme: dark) {
	:root:not([data-dmlty-theme]) .dmlty-app:not([data-dmlty-theme="light"]):not([data-dmlty-theme="dark"]) .dmlty-theme-moon {
		display: none;
	}

	:root:not([data-dmlty-theme]) .dmlty-app:not([data-dmlty-theme="light"]):not([data-dmlty-theme="dark"]) .dmlty-theme-sun {
		display: inline-flex;
	}
}

/* بازگشت به فروشگاه: روی نمایشگرِ باریک فقط نشانه می‌ماند. */
.dmlty-shop {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--dmlty-gap-xs);
	block-size: 36px;
	padding-inline: 10px;
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-3);
	color: var(--dmlty-text);
	font-size: 12px;
	font-weight: 600;
	flex: none;
}

.dmlty-shop:hover {
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-shop-icon {
	display: inline-flex;
}

.dmlty-shop-text {
	display: none;
}

/* ───────── نوارِ موجودی ───────── */

/*
 * ⚠ روی موبایل سطرِ دومِ سربرگ است و افقی می‌لغزد. نسخهٔ پیشین حداکثر دو واحد کنارِ
 * عنوان می‌گذاشت و زیرِ ۳۸۰ پیکسل دومی را هم پنهان می‌کرد، پس فروشگاهی با چند سکه
 * عملاً موجودیِ هیچ‌کدام را در سربرگ نمی‌دید.
 */
.dmlty-pill {
	order: 3;
	flex: 1 0 100%;
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	overflow-x: auto;
	scrollbar-width: none;
	padding-block-start: 2px;
}

.dmlty-pill::-webkit-scrollbar {
	display: none;
}

/*
 * ⚠ قرصِ موجودی عمداً شکلِ دیگری از دکمه‌های کنارش دارد: آن سه تا **کنش**اند و
 * این‌ها **اطلاعات**. اگر هر دو یک زمینه و یک قاب داشته باشند، چشم موجودی را هم
 * دکمه می‌خواند و رویش کلیک می‌کند.
 *
 * ⚠ `line-height` صریح است: ارتفاعِ سطرِ ارثیِ ۱٫۸۵ جعبهٔ متن را بلندتر از خودِ حروف
 * می‌کرد و نقطهٔ رنگی که به مرکزِ جعبه تراز می‌شد، پایین‌تر از خطِ متن می‌افتاد.
 */
.dmlty-pill-item {
	--dmlty-coin: var(--dmlty-brand);

	display: inline-flex;
	align-items: center;
	gap: 6px;
	flex: none;
	padding: 5px 12px;
	border: 1px solid color-mix(in srgb, var(--dmlty-coin) 28%, transparent);
	border-radius: var(--dmlty-radius-ctl);
	background: color-mix(in srgb, var(--dmlty-coin) 10%, transparent);
	font-size: 12px;
	font-weight: 600;
	line-height: 1.5;
	white-space: nowrap;
}

.dmlty-pill-dot {
	inline-size: 8px;
	block-size: 8px;
	border-radius: 3px;
	flex: none;
	align-self: center;
	background: var(--dmlty-coin);
}

.dmlty-pill-value {
	color: var(--dmlty-text);
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

/* نامِ واحد دیده می‌شود، وگرنه ردیفی از عددهای بی‌نام می‌ماند. */
.dmlty-pill-name {
	color: var(--dmlty-muted);
	font-weight: 500;
}

/* ═══════════════════════════════ ناوبری ═══════════════════════════════ */

/*
 * ⚠ یک نشانه‌گذاری، دو چهره. زیرِ ۱۰۲۴ نوارِ پایینِ چهارتایی است و گروهِ میان‌برها
 * دیده نمی‌شود (همان ردیف‌ها عیناً در صفحهٔ پروفایل هستند)؛ از ۱۰۲۴ به بالا همین
 * عنصر ستونِ کناری می‌شود و میان‌برها باز می‌شوند.
 */
/*
 * ⚠ نقشِ نقطه‌ایِ پس‌زمینه با یک گرادیانِ شعاعیِ تکرارشونده کشیده می‌شود، نه با
 * تصویر: هیچ پرونده‌ای بار نمی‌شود، و چون رنگش از متغیرِ برند می‌آید، با پوستهٔ
 * تیره و با رنگِ انتخابیِ خریدار خودبه‌خود هماهنگ می‌ماند.
 *
 * ⚠ زیرِ نقش یک زمینهٔ **مات** هست، نه شفاف: این نوار روی محتوای صفحه می‌چسبد و
 * زمینهٔ نیمه‌شفاف یعنی متنِ زیرش از پشتش دیده شود.
 */
.dmlty-nav {
	position: fixed;
	inset-inline: 0;
	inset-block-end: 0;
	z-index: 30;
	border-block-start: 1px solid var(--dmlty-line);
	background:
		radial-gradient(var(--dmlty-tint-2) 1px, transparent 1px) 0 0 / 14px 14px,
		var(--dmlty-surface);
	padding-block-end: env(safe-area-inset-bottom);
}

.dmlty-nav-static {
	position: static;
	padding-block-end: 0;
}

.dmlty-brand,
.dmlty-nav-heading,
.dmlty-nav-shortcuts {
	display: none;
}

.dmlty-nav-primary {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	max-inline-size: var(--dmlty-max);
	margin: 0 auto;
	padding: 6px 6px 4px;
	list-style: none;
}

/*
 * ⚠ فاصله‌ها همه از یک منبع می‌آیند و دستی تنظیم نمی‌شوند.
 *
 * پیش از این پَدِ بالا و پایین با هم برابر بود ولی نشانگرِ حالت سه پیکسل از پایین
 * می‌خورد، پس نشانه به بالا چسبیده به نظر می‌رسید. حالا خودِ نشانه یک جعبهٔ ثابت
 * است، فاصله‌اش تا برچسب یک عدد است، و ارتفاعِ کلِ ردیف از همان‌ها ساخته می‌شود.
 */
.dmlty-tab {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 4px;
	min-block-size: var(--dmlty-tab-h);
	padding: 7px 4px 9px;
	border-radius: 14px;
	color: var(--dmlty-muted);
	font-size: 11px;
	font-weight: 600;
	line-height: 1.4;
	transition: color 0.15s ease;
}

/* جعبهٔ ثابتِ نشانه: با یا بدونِ حالتِ فعال، برچسب همیشه در یک ارتفاع می‌نشیند. */
.dmlty-tab-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 30px;
	block-size: 26px;
	border-radius: 9px;
	transition: background 0.16s ease, transform 0.16s ease;
}

.dmlty-tab.is-active {
	color: var(--dmlty-brand);
}

/* ته‌رنگِ زیرِ نشانه — نه فقط رنگِ خط: حالت باید یک لکهٔ دیدنی داشته باشد. */
.dmlty-tab.is-active .dmlty-tab-icon {
	background: var(--dmlty-tint-2);
	transform: translateY(-1px);
}

.dmlty-tab:active .dmlty-tab-icon {
	transform: translateY(1px);
}

/* نشانگرِ مقصدِ فعال — زیرِ برچسب، نه فقط رنگ: حالت هرگز تنها با رنگ گفته نمی‌شود. */
.dmlty-tab.is-active::before {
	content: "";
	position: absolute;
	inset-block-end: 2px;
	inline-size: 18px;
	block-size: 3px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-brand);
}

/* ═══════════════════════════════ کارت ═══════════════════════════════ */

/* رنگِ متن صریح است چون این کارت گاهی خودش یک پیوند است. */
.dmlty-card {
	display: block;
	padding: var(--dmlty-card-pad);
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	color: var(--dmlty-text);
	box-shadow: var(--dmlty-shadow-sm);
}

/*
 * بازخوردِ اشاره‌گر روی هر چیزِ کلیک‌پذیر.
 *
 * ⚠ گذارها کوتاه‌اند و فقط روی ویژگی‌های ارزان (رنگ، سایه، جابه‌جایی) — نه روی عرض
 * و ارتفاع؛ چیدمانِ متحرک روی فهرستی از کارت‌ها کندی می‌سازد. حالتِ «حرکتِ کمتر» هم
 * پایینِ همین پرونده همه را خاموش می‌کند.
 */
.dmlty-card,
.dmlty-row,
.dmlty-chip,
.dmlty-btn,
.dmlty-iconbtn,
.dmlty-shop,
.dmlty-gate-cta,
.dmlty-howto-link,
.dmlty-me {
	transition: background 0.16s ease, color 0.16s ease, border-color 0.16s ease,
		box-shadow 0.16s ease, transform 0.16s ease;
}

a.dmlty-card:hover {
	transform: translateY(-2px);
	border-color: var(--dmlty-brand);
	box-shadow: var(--dmlty-shadow);
}

.dmlty-btn:active,
.dmlty-iconbtn:active,
.dmlty-chip:active {
	transform: translateY(1px);
}

.dmlty-card-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	margin-block-end: var(--dmlty-gap-sm);
}

.dmlty-card-title {
	margin: 0;
	font-size: 14px;
	font-weight: 700;
	color: var(--dmlty-text);
}

.dmlty-card-sub {
	margin: 0 0 var(--dmlty-gap-sm);
	color: var(--dmlty-muted);
	font-size: 13px;
}

.dmlty-muted {
	margin: 0;
	color: var(--dmlty-muted);
	font-size: 13px;
}

/* ⚠ هدفِ لمسی زیرِ ۲۴ پیکسل نمی‌رود. */
.dmlty-more {
	display: inline-flex;
	align-items: center;
	min-block-size: 24px;
	flex: none;
	color: var(--dmlty-brand);
	font-size: 12px;
	font-weight: 600;
}

/* ═══════════════════════════════ خانه ═══════════════════════════════ */

/*
 * ⚠ شبکهٔ جریانی، نه ناحیه‌های نام‌دار: نیمی از این کارت‌ها شرطی‌اند و ناحیهٔ
 * نام‌دار برای کارتی که رندر نشده یک حفرهٔ خالی می‌گذارد.
 */
.dmlty-home {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--dmlty-gap);
}

/*
 * بنرِ خوش‌آمد — همیشه تمام‌عرض، در هر تعداد ستون.
 *
 * ⚠ دو رنگِ برندِ خریدار هر دو به کار می‌روند. تا امروز رنگِ دوم در پنل اصلاً دیده
 * نمی‌شد: خریدار در تنظیمات انتخابش می‌کرد و هیچ‌جا اثری نداشت.
 */
.dmlty-hero {
	grid-column: 1 / -1;
	position: relative;
	overflow: hidden;
	isolation: isolate;
	padding: var(--dmlty-gap-lg) var(--dmlty-card-pad);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-brand);
	background: linear-gradient(135deg, var(--dmlty-brand) 0%, var(--dmlty-brand-2) 100%);
	color: #fff;
	box-shadow: var(--dmlty-shadow);
}

/* دو دایرهٔ نرم — تنها زینتِ صفحه، و هیچ متنی رویشان نمی‌نشیند. */
.dmlty-hero::before,
.dmlty-hero::after {
	content: "";
	position: absolute;
	border-radius: 50%;
	pointer-events: none;
	z-index: -1;
}

.dmlty-hero::after {
	inset-block-start: -70px;
	inset-inline-start: -50px;
	inline-size: 200px;
	block-size: 200px;
	background: rgba(255, 255, 255, 0.12);
}

.dmlty-hero::before {
	inset-block-end: -90px;
	inset-inline-start: 90px;
	inline-size: 150px;
	block-size: 150px;
	background: rgba(255, 255, 255, 0.07);
}

.dmlty-hero-body {
	position: relative;
	max-inline-size: 46ch;
}

.dmlty-hero-title {
	margin: 0 0 4px;
	font-size: 18px;
	font-weight: 700;
	color: #fff;
	text-wrap: balance;
}

.dmlty-hero-text {
	margin: 0;
	font-size: 13px;
	line-height: 1.9;
	color: rgba(255, 255, 255, 0.88);
}

/* ───────── نمودارِ ترکیبِ دارایی ───────── */

.dmlty-pie-card,
.dmlty-report {
	display: flex;
	flex-direction: column;
}

.dmlty-pie-wrap {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-lg);
	flex-wrap: wrap;
	justify-content: center;
	padding-block-start: var(--dmlty-gap-xs);
}

/*
 * ⚠ هالهٔ نرمِ پشتِ حلقه، تا نمودار روی زمینهٔ سفیدِ کارت معلق نماند. تزئینِ محض و
 * بیرون از جریانِ کلیک.
 */
.dmlty-pie {
	position: relative;
	inline-size: 138px;
	block-size: 138px;
	flex: none;
}

.dmlty-pie::before {
	content: "";
	position: absolute;
	inset: 6px;
	border-radius: 50%;
	background: var(--dmlty-surface-2);
	pointer-events: none;
}

.dmlty-pie-svg {
	position: relative;
	inline-size: 100%;
	block-size: 100%;
}

/*
 * ⚠ خطِ نازکِ هم‌رنگِ کارت بینِ کمان‌ها: دو رنگِ نزدیک به هم بدونِ آن روی مرز در هم
 * می‌روند و حلقه یک‌تکه به نظر می‌رسد.
 * ⚠ سرِ گردِ کمان روی سهم‌های خیلی کوچک به کمانِ بعدی می‌زند؛ سرِ صاف دقیق است.
 */
.dmlty-pie-arc {
	fill: none;
	stroke-width: 18;
	stroke-linecap: butt;
}


.dmlty-pie-mid {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	pointer-events: none;
}

.dmlty-pie-mid-num {
	font-size: 22px;
	font-weight: 700;
	line-height: 1.2;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
}

.dmlty-pie-mid-cap {
	color: var(--dmlty-muted);
	font-size: 11.5px;
}

/* فهرستِ کنارِ نمودار، همان متنِ جایگزینِ خواندنیِ آن است — پس همیشه دیده می‌شود. */
.dmlty-pie-legend {
	display: flex;
	flex-direction: column;
	gap: 2px;
	flex: 1 1 150px;
	min-inline-size: 0;
	margin: 0;
	padding: 0;
	list-style: none;
}

/* هر ردیفِ فهرست یک ریلِ کوچک است، نه یک سطرِ متنِ لخت. */
.dmlty-pie-row {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding: 7px 10px;
	border-radius: var(--dmlty-radius-ctl);
	font-size: 12.5px;
	transition: background 0.15s ease;
}

.dmlty-pie-row:hover {
	background: var(--dmlty-surface-2);
}

.dmlty-pie-dot {
	inline-size: 10px;
	block-size: 10px;
	flex: none;
	border-radius: 4px;
	background: var(--dmlty-coin, var(--dmlty-brand));
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--dmlty-coin, var(--dmlty-brand)) 18%, transparent);
}

.dmlty-pie-name {
	flex: 1 1 auto;
	min-inline-size: 0;
	color: var(--dmlty-muted);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dmlty-pie-share {
	flex: none;
	min-inline-size: 42px;
	padding: 2px 8px;
	border-radius: var(--dmlty-radius-pill);
	background: color-mix(in srgb, var(--dmlty-coin, var(--dmlty-brand)) 12%, transparent);
	color: var(--dmlty-text);
	font-size: 11.5px;
	font-weight: 700;
	text-align: center;
	font-variant-numeric: tabular-nums;
}

/* ───────── کارنامه ───────── */

.dmlty-report-list {
	display: flex;
	flex-direction: column;
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-report-row {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding-block: 10px;
	border-block-end: 1px solid var(--dmlty-line-soft);
}

.dmlty-report-row:last-child {
	border-block-end: 0;
	padding-block-end: 0;
}

.dmlty-report-row:first-child {
	padding-block-start: 0;
}

.dmlty-report-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 30px;
	block-size: 30px;
	flex: none;
	border-radius: 9px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-report-ok .dmlty-report-art {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-report-warn .dmlty-report-art {
	background: var(--dmlty-warn-bg);
	color: var(--dmlty-warn);
}

.dmlty-report-label {
	flex: 1 1 auto;
	min-inline-size: 0;
	color: var(--dmlty-muted);
	font-size: 12.5px;
}

.dmlty-report-value {
	flex: none;
	font-size: 14px;
	font-weight: 700;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
}

/* ───────── دروازه‌های خانه: ماموریت‌ها، گردونه، جوایز ───────── */

/*
 * ⚠ سه کارتِ خاکستریِ یک‌شکل بودند و چشم هیچ‌کدام را از دیگری جدا نمی‌کرد. حالا هر
 * کدام نشانه و لحنِ رنگِ خودش را دارد — ولی معنا **تنها** بر دوشِ رنگ نیست: نشانه و
 * عنوان هر دو همان تفکیک را می‌سازند، پس برای کسی که رنگ‌ها را متفاوت نمی‌بیند هم
 * کار می‌کند.
 */
.dmlty-gate {
	position: relative;
	display: flex;
	flex-direction: column;
	padding-block-end: 0;
	overflow: hidden;
}

/* ⚠ عنوان فضای آزاد را می‌گیرد و نشانه ثابت می‌ماند؛ `space-between`ِ پیش‌فرضِ سرِ
   کارت اینجا آن دو را از هم دور می‌انداخت. */
.dmlty-gate .dmlty-card-head {
	justify-content: flex-start;
}

.dmlty-gate .dmlty-card-title {
	flex: 1 1 auto;
	min-inline-size: 0;
}

.dmlty-gate .dmlty-card-sub {
	flex: 1 1 auto;
	margin-block-end: var(--dmlty-gap);
}

.dmlty-gate-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 36px;
	block-size: 36px;
	flex: none;
	border-radius: 11px;
}

.dmlty-gate-brand .dmlty-gate-art {
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-gate-ok .dmlty-gate-art {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-gate-accent .dmlty-gate-art {
	background: var(--dmlty-danger-bg);
	color: var(--dmlty-accent);
}

/* ⚠ دکمه نه، ردیفِ پیوند: سه دکمهٔ پرِ رنگ کنار هم روی خانه با هم رقابت می‌کنند و
   هیچ‌کدام برنده نمی‌شود. کنشِ اصلیِ صفحه همان کارت است، این فقط راهِ ورود. */
.dmlty-gate-cta {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	margin-inline: calc(var(--dmlty-card-pad) * -1);
	padding: 12px var(--dmlty-card-pad);
	border-block-start: 1px solid var(--dmlty-line-soft);
	color: var(--dmlty-brand);
	font-size: 13px;
	font-weight: 700;
}

.dmlty-gate-cta:hover {
	background: var(--dmlty-tint);
}

.dmlty-gate-ok .dmlty-gate-cta {
	color: var(--dmlty-ok);
}

.dmlty-gate-accent .dmlty-gate-cta {
	color: var(--dmlty-accent);
}

/* پیکانِ ردیف در راست‌به‌چپ به چپ اشاره می‌کند؛ همان جهتِ حرکت. */
.dmlty-gate-cta .dmlty-row-chev {
	color: inherit;
}

/* ⚠ کارتی که مقصدش خالی است دکمه نمی‌گیرد؛ فقط جمله. پس ته‌بندش هم لازم نیست. */
.dmlty-gate .dmlty-muted {
	margin-block-end: var(--dmlty-card-pad);
}

/* ───────── موجودی و کیف پول ───────── */

.dmlty-wallet-amount {
	margin: 0;
	font-size: 24px;
	font-weight: 700;
	line-height: 1.5;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
	overflow-wrap: anywhere;
}

/* ═══════════════════════════ کیف پول ═══════════════════════════ */

/*
 * ⚠ کارت و حساب‌ها کنارِ هم، نه زیرِ هم.
 *
 * کارت نسبتِ ابعادِ خودش را دارد و روی نمایشگرِ پهن بیشتر از نصفِ عرض را نمی‌خواهد؛
 * کشیدنش تا لبه شکلِ کارت را نابود می‌کند و گذاشتنش تنها در یک سطر، نصفِ صفحه را
 * خالی می‌گذارد.
 */
/*
 * شبکهٔ کاشی‌های کیف پول.
 *
 * ⚠ چیدمانِ دستیِ دوستونی اینجا جواب نمی‌دهد چون تعدادِ کاشی‌ها ثابت نیست: حسابِ
 * کیفِ مجازی ممکن است نباشد و کارتِ جریان وقتی تراکنشی نیست ساخته نمی‌شود. شبکه
 * هر تعداد را می‌چیند و کاشیِ فردِ آخر تمامِ عرض را می‌گیرد، پس هیچ خانهٔ خالی
 * نمی‌ماند و هیچ‌وقت هم به یک ستونِ صافِ زیرِ هم فرو نمی‌ریزد.
 */
.dmlty-purse-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--dmlty-gap);
}

/* خانهٔ کششی: کارتِ کوتاه هم‌قدِ بلندترینِ همان ردیف می‌شود. */
.dmlty-purse-cell {
	display: flex;
	min-inline-size: 0;
}

.dmlty-purse-cell > * {
	inline-size: 100%;
}

/*
 * کارتِ اعتبار.
 *
 * ⚠ نقشِ روی کارت با گرادیان کشیده می‌شود، نه با تصویر: هیچ پرونده‌ای بار نمی‌شود
 * و رنگش از همان دو رنگِ برندِ خریدار می‌آید.
 */
.dmlty-plastic {
	position: relative;
	overflow: hidden;
	isolation: isolate;
	display: flex;
	flex-direction: column;
	gap: 2px;
	padding: 20px;
	border-radius: 20px;
	background: linear-gradient(135deg, var(--dmlty-brand) 0%, var(--dmlty-brand-2) 100%);
	color: #fff;
	box-shadow: var(--dmlty-shadow-lg);
}

/* دو دایرهٔ نرم، مثلِ بنرِ خانه — همان زبانِ بصری. */
.dmlty-plastic::before,
.dmlty-plastic::after {
	content: "";
	position: absolute;
	border-radius: 50%;
	pointer-events: none;
	z-index: -1;
}

.dmlty-plastic::before {
	inset-block-start: -70px;
	inset-inline-start: -40px;
	inline-size: 180px;
	block-size: 180px;
	background: rgba(255, 255, 255, 0.13);
}

.dmlty-plastic::after {
	inset-block-end: -80px;
	inset-inline-end: -30px;
	inline-size: 150px;
	block-size: 150px;
	background: rgba(255, 255, 255, 0.08);
}

.dmlty-plastic-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	margin-block-end: var(--dmlty-gap);
}

/* چیپِ کارت — کاملاً با شیوه‌نامه کشیده می‌شود. */
.dmlty-plastic-chip {
	position: relative;
	inline-size: 34px;
	block-size: 26px;
	flex: none;
	border-radius: 6px;
	background: linear-gradient(145deg, #f2d68a, #c9a44c);
}

.dmlty-plastic-chip::before {
	content: "";
	position: absolute;
	inset: 6px 4px;
	border-inline: 1px solid rgba(0, 0, 0, 0.22);
	border-block: 1px solid rgba(0, 0, 0, 0.22);
}

.dmlty-plastic-brand {
	min-inline-size: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	color: rgba(255, 255, 255, 0.9);
	font-size: 12.5px;
	font-weight: 700;
}

.dmlty-plastic-cap {
	color: rgba(255, 255, 255, 0.82);
	font-size: 12px;
}

.dmlty-plastic-sum {
	font-size: 27px;
	font-weight: 700;
	line-height: 1.45;
	font-variant-numeric: tabular-nums;
}

.dmlty-plastic-foot {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	margin-block-start: var(--dmlty-gap);
}

.dmlty-plastic-name {
	min-inline-size: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	color: rgba(255, 255, 255, 0.92);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 0.02em;
}

.dmlty-plastic-art {
	display: inline-flex;
	flex: none;
	color: rgba(255, 255, 255, 0.75);
}

@media screen and (min-width: 860px) {
	.dmlty-purse-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: var(--dmlty-gap-lg);
	}

	/* کاشیِ فردِ آخر تمامِ ردیف را می‌گیرد؛ خانهٔ خالی هرگز نمی‌ماند. */
	.dmlty-purse-cell.is-wide {
		grid-column: 1 / -1;
	}

	/*
	 * ⚠ کاشیِ پهن اگر کارتِ اعتبار باشد نباید کشیده و بدشکل شود: نسبتِ کارتِ
	 * بانکی بخشی از شناخته‌شدنی‌بودنش است.
	 */
	.dmlty-purse-cell.is-wide .dmlty-plastic {
		max-inline-size: 460px;
	}
}

.dmlty-account-card .dmlty-card-head {
	justify-content: flex-start;
	gap: var(--dmlty-gap-xs);
}

.dmlty-account-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 28px;
	block-size: 28px;
	flex: none;
	border-radius: 8px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

/* دو کاشیِ جریان — از همان سطرهایی که پایین‌تر فهرست می‌شوند. */
.dmlty-flow {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(170px, 100%), 1fr));
	gap: var(--dmlty-gap);
}

.dmlty-flow-tile {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding: 14px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	box-shadow: var(--dmlty-shadow-sm);
}

.dmlty-flow-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 36px;
	block-size: 36px;
	flex: none;
	border-radius: 11px;
}

.dmlty-flow-in .dmlty-flow-art {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-flow-out .dmlty-flow-art {
	background: var(--dmlty-danger-bg);
	color: var(--dmlty-danger);
}

.dmlty-flow-body {
	display: flex;
	flex-direction: column;
	min-inline-size: 0;
}

.dmlty-flow-num {
	font-size: 17px;
	font-weight: 700;
	line-height: 1.4;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
}

.dmlty-flow-cap {
	color: var(--dmlty-muted);
	font-size: 11.5px;
}

/* داخلِ کارتِ جریان، کاشی‌ها قابِ خودشان را نمی‌خواهند. */
.dmlty-flowcard .dmlty-flow-tile {
	border: 0;
	background: var(--dmlty-surface-2);
	box-shadow: none;
}

/* ───────── دفترِ تراکنش‌ها ───────── */

.dmlty-ledger {
	margin: 0;
	padding: 0;
	list-style: none;
}

/* برچسبِ روز: تاریخ یک بار گفته می‌شود، نه روی تک‌تکِ سطرها. */
.dmlty-ledger-day {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	margin-block: var(--dmlty-gap-sm) 2px;
	color: var(--dmlty-muted);
	font-size: 11.5px;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.dmlty-ledger-day::after {
	content: "";
	flex: 1 1 auto;
	block-size: 1px;
	background: var(--dmlty-line-soft);
}

.dmlty-ledger-day:first-child {
	margin-block-start: 0;
}

.dmlty-ledger-row {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding-block: 10px;
	border-block-end: 1px solid var(--dmlty-line-soft);
}

.dmlty-ledger-row:last-child {
	border-block-end: 0;
}

.dmlty-ledger-what {
	min-inline-size: 0;
	font-size: 13.5px;
	font-weight: 600;
}

/* کارتِ کیف پول لحنِ سبزِ اعتبار می‌گیرد تا با شمارنده‌های امتیاز اشتباه نشود. */
.dmlty-card-wallet {
	display: flex;
	flex-direction: column;
	border-color: transparent;
	background: var(--dmlty-ok-bg);
}

.dmlty-card-wallet .dmlty-wallet-amount {
	color: var(--dmlty-ok);
}

.dmlty-card-wallet .dmlty-more {
	color: var(--dmlty-ok);
}

.dmlty-card-wallet:hover {
	border-color: var(--dmlty-ok);
}

.dmlty-card-foot {
	display: block;
	margin-block-start: auto;
	padding-block-start: var(--dmlty-gap-xs);
	color: var(--dmlty-muted);
	font-size: 12px;
}

.dmlty-balances {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(140px, 100%), 1fr));
	gap: var(--dmlty-gap-sm);
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * کاشیِ واحد — ستونی: نشانه بالا، عدد وسط، نام پایین.
 *
 * ⚠ رنگ از متغیرِ `--dmlty-coin` می‌آید که سرور روی خودِ کاشی می‌نشاند؛ زمینه و
 * حاشیه و رنگِ عدد همه از همان یک مقدار ساخته می‌شوند، پس کاشیِ «نقره» نقره‌ای و
 * کاشیِ «طلا» طلایی است بی‌آنکه شیوه‌نامه نامِ هیچ واحدی را بداند.
 * ⚠ اعلانِ دومِ هر خط برای مرورگرِ بدونِ color-mix نامعتبر است و کنار می‌رود؛ همان
 * حالتِ خنثای اول می‌ماند.
 */
.dmlty-balance {
	--dmlty-coin: var(--dmlty-brand);

	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--dmlty-gap-xs);
	min-inline-size: 0;
	padding: 14px;
	border: 1px solid var(--dmlty-line-soft);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
	transition: transform 0.16s ease, box-shadow 0.16s ease, border-color 0.16s ease;
}

.dmlty-balance {
	border-color: color-mix(in srgb, var(--dmlty-coin) 26%, transparent);
	background: color-mix(in srgb, var(--dmlty-coin) 8%, var(--dmlty-surface));
}

/* بالا آمدنِ نامحسوس زیرِ اشاره‌گر — بازخوردِ لمسِ بی‌صدا. */
.dmlty-balance:hover {
	transform: translateY(-2px);
	border-color: color-mix(in srgb, var(--dmlty-coin) 48%, transparent);
	box-shadow: var(--dmlty-shadow);
}

.dmlty-balance-art {
	display: inline-flex;
}

.dmlty-balance .dmlty-badge-art {
	inline-size: 34px;
	block-size: 34px;
}

.dmlty-balance .dmlty-badge-icon {
	border-radius: 10px;
	background: color-mix(in srgb, var(--dmlty-coin) 18%, transparent);
	color: var(--dmlty-coin);
}

.dmlty-balance-value {
	font-size: 20px;
	font-weight: 700;
	line-height: 1.35;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
	overflow-wrap: anywhere;
}

.dmlty-balance-name {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	color: var(--dmlty-muted);
	font-size: 12px;
	line-height: 1.5;
}

/* نقطهٔ رنگیِ کنارِ نام: همان رنگِ کاشی، این بار درست چسبیده به نامِ واحد — پس
   ارتباطِ رنگ و نام گفته می‌شود، نه حدس زده. */
.dmlty-balance-name::before {
	content: "";
	inline-size: 7px;
	block-size: 7px;
	flex: none;
	border-radius: 50%;
	background: var(--dmlty-coin);
}

/*
 * کارتِ آمار فقط در شبکهٔ **سه‌ستونه** پهن می‌شود.
 *
 * ⚠ در دو ستون پهن‌کردنش حفره می‌سازد: کارتِ کیف پول یک ستون می‌گیرد و کارتِ آمار
 * که دو ستون می‌خواهد در جای باقی‌مانده جا نمی‌شود، پس به سطرِ بعد می‌پرد و کنارِ
 * کیف پول یک خانهٔ خالی می‌ماند. در سه ستون همان دو تا دقیقاً یک سطرِ کامل می‌شوند.
 */
@media screen and (min-width: 1280px) {
	.dmlty-card-stats {
		grid-column: span 2;
	}
}

/* نشانِ دلخواهِ نوعِ امتیاز و سطح. نبودنش هیچ فضایی نمی‌گیرد. */
.dmlty-badge-art {
	display: inline-flex;
	flex: none;
	inline-size: 26px;
	block-size: 26px;
}

.dmlty-badge-art img {
	inline-size: 100%;
	block-size: 100%;
	border-radius: 7px;
	object-fit: cover;
}

/* جایگزینِ برداری وقتی فروشگاه تصویری نگذاشته. */
.dmlty-badge-icon {
	align-items: center;
	justify-content: center;
	border-radius: 8px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

/*
 * ⚠ فهرستِ سطح‌ها: حالتِ ترکیبِ additive/multiplicative اجازه می‌دهد کاربر همزمان
 * در چند سطح باشد، پس هر سطح چیپِ مستقلِ خودش را می‌گیرد (نشان+نام با هم در یک
 * قاب) نه یک ردیفِ نشان‌های پشتِ‌سرِهم و یک متنِ پیوستهٔ جدا. با یک سطح هم همین
 * چیدمان درست است — یک چیپِ تنها.
 */
.dmlty-tier-list {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	margin: 0 0 var(--dmlty-gap-xs);
	padding: 0;
	list-style: none;
}

.dmlty-tier-chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 5px 10px;
	border: 1px solid color-mix(in srgb, var(--dmlty-brand) 22%, transparent);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-tint);
	font-size: 13px;
	font-weight: 700;
	line-height: 1.5;
}

.dmlty-tier-chip .dmlty-badge-art {
	inline-size: 18px;
	block-size: 18px;
}

/* ───────── نوارِ پیشرفت ───────── */

.dmlty-bar-row {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	margin-block: var(--dmlty-gap-sm);
}

.dmlty-bar {
	flex: 1 1 auto;
	min-inline-size: 0;
	block-size: 10px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-surface-3);
	overflow: hidden;
}

.dmlty-bar-fill {
	display: block;
	block-size: 100%;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-brand);
	background: linear-gradient(90deg, var(--dmlty-brand-2), var(--dmlty-brand));
	transition: inline-size 0.4s ease;
}

.dmlty-bar-pct {
	flex: none;
	color: var(--dmlty-brand);
	font-size: 12.5px;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

/* کارتِ سطح لبهٔ رنگیِ باریکی می‌گیرد تا در شبکهٔ خانه بی‌صدا نماند. */
.dmlty-card-tier {
	position: relative;
	overflow: hidden;
}

.dmlty-card-tier::before {
	content: "";
	position: absolute;
	inset-block: 0;
	inset-inline-start: 0;
	inline-size: 3px;
	background: linear-gradient(180deg, var(--dmlty-brand-2), var(--dmlty-brand));
}

/* ═════════════════ شبکهٔ کارت‌ها: ماموریت‌ها و جوایز ═════════════════ */

/* ⚠ یک پوسته برای هر دو، عمداً: دو تب کنار هم‌اند و کارت‌هایشان باید هم‌اندازه
   باشند. دو شیوه‌نامهٔ موازی بالاخره از هم واگرا می‌شوند. */
.dmlty-prizes {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(240px, 100%), 1fr));
	gap: var(--dmlty-gap);
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-prize {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	box-shadow: var(--dmlty-shadow-sm);
}

.dmlty-prize {
	transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}

.dmlty-prize:hover {
	transform: translateY(-3px);
	border-color: var(--dmlty-brand);
	box-shadow: var(--dmlty-shadow-lg);
}

/* ═════════════════════════ قابِ تصویرِ کارت ═════════════════════════ */

/*
 * ⚠ نسبت‌محور است نه ارتفاع‌ثابت: کارت‌های یک ردیف باید در هر عرضی هم‌قد بمانند.
 * ⚠ قاب همیشه هست. فروشگاهی که در تنظیمات تصویر گذاشته باید ببیندش، و فروشگاهی که
 * نگذاشته یک طرحِ ساخته‌شده می‌بیند نه یک جعبهٔ خالی.
 */
.dmlty-cover {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: var(--dmlty-surface-2);
}

.dmlty-cover img {
	inline-size: 100%;
	block-size: 100%;
	object-fit: cover;
	transition: transform 0.35s ease;
}

/* بزرگ‌نماییِ آرامِ تصویر زیرِ اشاره‌گر — بازخوردِ «این کارت زنده است». */
.dmlty-prize:hover .dmlty-cover img {
	transform: scale(1.05);
}

/*
 * طرحِ پیش‌فرض: هیچ پرونده‌ای بار نمی‌شود. دو گرادیانِ زاویه‌دار یک نقشِ نرمِ قطری
 * می‌سازند و نشانهٔ همان بخش وسط می‌نشیند. با پوستهٔ تیره و رنگِ برندِ خریدار
 * خودبه‌خود هماهنگ است چون از همان متغیرها ساخته شده.
 */
.dmlty-cover-blank {
	background:
		repeating-linear-gradient(
			135deg,
			var(--dmlty-tint) 0,
			var(--dmlty-tint) 10px,
			transparent 10px,
			transparent 20px
		),
		var(--dmlty-surface-2);
}

.dmlty-cover-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 58px;
	block-size: 58px;
	border-radius: 50%;
	background: var(--dmlty-surface);
	color: var(--dmlty-brand);
	box-shadow: var(--dmlty-shadow-sm);
}

.dmlty-cover-prize.dmlty-cover-blank .dmlty-cover-art {
	color: var(--dmlty-ok);
}

/* ═══════════════════════════ ماموریت‌ها ═══════════════════════════ */

.dmlty-prize-art {
	position: relative;
}

/*
 * فهرستِ ماموریت‌ها — ردیفی، نه ویترینی.
 *
 * ⚠ چرا از شبکهٔ کارت‌های عکس‌دار برگشت: ماموریت یک کارِ انجام‌دادنی است و فهرست
 * باید از بالا به پایین اسکن شود. ویترین همان الگویی است که برای جوایز درست است
 * و آن دو نباید یک شکل باشند، وگرنه مشتری فرقِ «کاری که باید بکنم» و «چیزی که
 * می‌توانم بگیرم» را از روی صفحه نمی‌فهمد.
 */
.dmlty-quests {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap-sm);
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-quest-row {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding: 14px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	box-shadow: var(--dmlty-shadow-sm);
	transition: transform 0.16s ease, box-shadow 0.16s ease, border-color 0.16s ease;
}

.dmlty-quest-row:hover {
	transform: translateY(-2px);
	border-color: var(--dmlty-brand);
	box-shadow: var(--dmlty-shadow);
}

/* ⚠ حالتِ انجام‌شده سه نشانه دارد: تیک، برچسبِ متنی، و این زمینهٔ متمایز. */
.dmlty-quest-row.is-done {
	background: var(--dmlty-surface-2);
	border-style: dashed;
}

/* ⚠ تصویرِ ماموریت باید **دیده** شود، نه یک نشانکِ ریز. این اندازه به عکس مجال
   می‌دهد و در نبودِ عکس هم مدالِ نشانه توخالی به نظر نمی‌رسد. */
.dmlty-quest-thumb {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 76px;
	block-size: 76px;
	flex: none;
	overflow: hidden;
	border-radius: 15px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

@media screen and (min-width: 768px) {
	.dmlty-quest-thumb {
		inline-size: 92px;
		block-size: 92px;
	}
}

.dmlty-quest-row.is-done .dmlty-quest-thumb {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

/* ماموریتِ تمام‌شده: می‌ماند تا دیده شود، ولی جلو نمی‌آید. */
.dmlty-quest-row.is-expired {
	background: var(--dmlty-surface-2);
	border-style: dashed;
}

.dmlty-quest-row.is-expired .dmlty-quest-thumb {
	opacity: 0.55;
	filter: grayscale(1);
}

.dmlty-quest-thumb img {
	inline-size: 100%;
	block-size: 100%;
	object-fit: cover;
}

.dmlty-quest-main {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-inline-size: 0;
}

.dmlty-quest-name {
	font-size: 14.5px;
	font-weight: 700;
	line-height: 1.6;
	color: var(--dmlty-text);
}

.dmlty-quest-note {
	color: var(--dmlty-muted);
	font-size: 12.5px;
	line-height: 1.85;
}

/* روی موبایل ستونِ سوم زیرِ دو ستونِ بالا می‌افتد و تمامِ عرض را می‌گیرد. */
.dmlty-quest-side {
	grid-column: 1 / -1;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	flex-wrap: wrap;
	padding-block-start: 12px;
	margin-block-start: 2px;
	border-block-start: 1px dashed var(--dmlty-line);
}

.dmlty-quest-state {
	display: inline-flex;
	align-items: center;
	gap: 4px;
	padding: 4px 10px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
	font-size: 11.5px;
	font-weight: 700;
}

/* دروازهٔ «اول اطلاعات حساب»: کارتِ راهنمای بالای فرم و مقدارِ قفل‌شدهٔ تاریخ تولد. */
.dmlty-gate-note {
	border-color: var(--dmlty-brand);
	background: var(--dmlty-tint);
}

.dmlty-gate-missing {
	margin: 8px 0 0;
	font-weight: 700;
	color: var(--dmlty-text);
}

.dmlty-locked-value {
	margin: 0;
	padding: 10px 12px;
	border-radius: 10px;
	background: var(--dmlty-surface-2);
	font-weight: 700;
	color: var(--dmlty-text);
}

/* خانهٔ پیامِ دکمهٔ «بررسی»: تمامِ عرضِ ردیف، و خالی که باشد جا نمی‌گیرد. */
.dmlty-quest-status {
	grid-column: 1 / -1;
	font-size: 12.5px;
	line-height: 1.9;
	color: var(--dmlty-muted);
}

.dmlty-quest-status:empty {
	display: none;
}

.dmlty-quest-status.is-ok,
.dmlty-quest-status.is-error {
	padding: 8px 12px;
	border-radius: 10px;
}

.dmlty-quest-status.is-ok {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-quest-status.is-error {
	background: var(--dmlty-warn-bg);
	color: var(--dmlty-warn);
}

.dmlty-quest-verify {
	flex: none;
	white-space: nowrap;
}

/* پاداشِ انجام‌شده ولی هنوز در مهلتِ بررسی: نشانهٔ ساعت + متن، نه فقط رنگ. */
.dmlty-quest-state-pending {
	background: var(--dmlty-warn-bg);
	color: var(--dmlty-warn);
	white-space: normal;
}

/* ⚠ «تمام شد» نباید رنگِ موفقیت بگیرد؛ خبرِ خوبی نیست. خاکستریِ خنثی، و متنِ خودِ
   برچسب حاملِ معناست تا وضعیت فقط با رنگ گفته نشود. */
.dmlty-quest-state-expired {
	background: var(--dmlty-surface-2);
	color: var(--dmlty-muted);
	white-space: normal;
}

.dmlty-quest-go {
	flex: none;
	white-space: nowrap;
}

/* پیکان در راست‌به‌چپ به چپ اشاره می‌کند — همان جهتِ «برو جلو». */
.dmlty-quest-chev {
	display: inline-flex;
	opacity: 0.75;
}

/* از تبلت به بالا هر سه ستون روی یک خط می‌نشینند: فهرست فشرده‌تر و سریع‌تر خوانده
   می‌شود، و همان جایی است که ردیف بر کارت برتری پیدا می‌کند. */
@media screen and (min-width: 768px) {
	.dmlty-quest-row {
		grid-template-columns: auto minmax(0, 1fr) auto;
		padding: 14px 16px;
	}

	.dmlty-quest-side {
		grid-column: auto;
		justify-content: flex-end;
		flex-wrap: nowrap;
		padding-block-start: 0;
		margin-block-start: 0;
		border-block-start: 0;
		padding-inline-start: var(--dmlty-gap);
	}
}

.dmlty-prize-body {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap-sm);
	padding: var(--dmlty-card-pad);
	flex: 1 1 auto;
}

.dmlty-prize-title {
	flex: 1 1 auto;
	min-inline-size: 0;
	font-size: 14.5px;
	font-weight: 700;
	line-height: 1.6;
	color: var(--dmlty-text);
}

.dmlty-prize-gap {
	color: var(--dmlty-muted);
	font-size: 12.5px;
}

.dmlty-reward-chip {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	padding: 4px 11px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
	font-size: 12.5px;
	font-weight: 700;
}

/* ───────── سرصفحهٔ پیشرفت ───────── */

.dmlty-quest {
	border-color: transparent;
	background: var(--dmlty-tint);
}

.dmlty-quest-head {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
}

.dmlty-quest-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 42px;
	block-size: 42px;
	flex: none;
	border-radius: 12px;
	background: var(--dmlty-surface);
	color: var(--dmlty-brand);
}

.dmlty-quest-body {
	display: flex;
	flex-direction: column;
	min-inline-size: 0;
}

.dmlty-quest-title {
	font-size: 14.5px;
	font-weight: 700;
	color: var(--dmlty-text);
}

.dmlty-quest-sub {
	color: var(--dmlty-muted);
	font-size: 12.5px;
}

.dmlty-quest .dmlty-bar {
	background: var(--dmlty-surface);
}

.dmlty-quest .dmlty-bar-row {
	margin-block-end: 0;
}

/* نوعِ جایزه روی قاب می‌نشیند: در متن یک سطرِ کم‌رنگِ فراموش‌شدنی بود. */
.dmlty-prize-kind {
	position: absolute;
	inset-block-start: 10px;
	inset-inline-start: 10px;
	z-index: 1;
	display: inline-flex;
	align-items: center;
	gap: 4px;
	padding: 4px 10px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-surface);
	color: var(--dmlty-text);
	font-size: 11px;
	font-weight: 700;
	box-shadow: var(--dmlty-shadow-sm);
}

/*
 * ⚠ پای کارتِ جایزه لبهٔ بلیتی دارد — همان استعارهٔ «کوپن». خطِ چین کارتِ جایزه را
 * از کارتِ ماموریت جدا می‌کند بی‌آنکه دو زبانِ بصریِ بیگانه بسازد.
 */
.dmlty-prize-foot {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	flex-wrap: wrap;
	padding: var(--dmlty-gap-sm) var(--dmlty-card-pad);
	border-block-start: 2px dashed var(--dmlty-line);
	background: var(--dmlty-surface-2);
}

/* دو بریدگیِ گردِ دو سرِ خطِ چین. */
.dmlty-prize-foot::before,
.dmlty-prize-foot::after {
	content: "";
	position: absolute;
	inset-block-start: -9px;
	inline-size: 16px;
	block-size: 16px;
	border-radius: 50%;
	background: var(--dmlty-bg);
}

.dmlty-prize-foot::before {
	inset-inline-start: -9px;
}

.dmlty-prize-foot::after {
	inset-inline-end: -9px;
}

.dmlty-prize-price-cap {
	display: block;
	color: var(--dmlty-muted);
	font-size: 11px;
	font-weight: 600;
}

.dmlty-prize-price-value {
	display: block;
}

/* جایزهٔ در دسترس لبهٔ سبز می‌گیرد؛ کنارِ نشانهٔ قفلِ کارتِ دور از دسترس، حالت هرگز
   تنها با رنگ گفته نمی‌شود. */
.dmlty-prize.is-ready {
	border-color: color-mix(in srgb, var(--dmlty-ok) 34%, transparent);
}

.dmlty-prize.is-short .dmlty-cover img {
	filter: grayscale(0.35);
}

/* فرم خودش یک ردیفِ منعطف است. display:contents اینجا نه — روی چند مرورگر فرم را
   از دسترسِ صفحه‌خوان بیرون می‌برد. */
.dmlty-prize-foot form {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	margin: 0;
	flex-wrap: wrap;
}

.dmlty-prize-price {
	font-size: 13px;
	font-weight: 700;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
}

.dmlty-price-op {
	color: var(--dmlty-muted);
	font-weight: 500;
}

.dmlty-pay-coin {
	max-inline-size: 150px;
	padding: 6px 8px;
	border: 1px solid var(--dmlty-line);
	border-radius: 8px;
	background: var(--dmlty-surface);
	color: var(--dmlty-text);
	font: inherit;
	font-size: 12px;
}

/* ───────── راهِ خروج: «چطور … بگیرم؟» ───────── */

.dmlty-howto {
	margin-block-start: var(--dmlty-gap-xs);
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
	overflow: hidden;
}

.dmlty-howto-head {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	padding: 8px 10px;
	color: var(--dmlty-text);
	font-size: 12.5px;
	font-weight: 700;
	cursor: pointer;
	list-style: none;
}

.dmlty-howto-head::-webkit-details-marker {
	display: none;
}

.dmlty-howto-body {
	padding: 0 10px 10px;
}

.dmlty-howto-text {
	margin: 0 0 var(--dmlty-gap-xs);
	color: var(--dmlty-muted);
	font-size: 12.5px;
}

.dmlty-howto-list {
	display: flex;
	flex-direction: column;
	gap: 4px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-howto-link {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	min-block-size: 32px;
	padding: 4px 8px;
	border-radius: 8px;
	background: var(--dmlty-surface);
	color: var(--dmlty-brand);
	font-size: 12.5px;
	font-weight: 600;
}

.dmlty-howto-link:hover {
	background: var(--dmlty-tint);
}

.dmlty-howto-link .dmlty-row-chev {
	margin-inline-start: auto;
}

/* ═══════════════════════════════ دکمه ═══════════════════════════════ */

.dmlty-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--dmlty-gap-xs);
	min-block-size: 42px;
	padding: 0 18px;
	border: 1px solid transparent;
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-brand);
	color: var(--dmlty-on-brand);
	font: inherit;
	font-size: 14px;
	font-weight: 700;
	cursor: pointer;
	text-align: center;
}

.dmlty-btn:hover {
	filter: brightness(1.06);
}

.dmlty-btn[disabled] {
	opacity: 0.5;
	cursor: not-allowed;
	filter: none;
}

.dmlty-btn-sm {
	min-block-size: 34px;
	padding: 0 12px;
	font-size: 12.5px;
}

.dmlty-btn-ghost {
	background: transparent;
	border-color: var(--dmlty-line);
	color: var(--dmlty-text);
}

.dmlty-btn-ghost:hover {
	background: var(--dmlty-tint);
	border-color: var(--dmlty-brand);
	color: var(--dmlty-brand);
	filter: none;
}

.dmlty-btn-block {
	display: flex;
	inline-size: 100%;
}

/* ═════════════════════ ردیف‌های فهرست (پروفایل) ═════════════════════ */

.dmlty-rows {
	margin: 0;
	padding: 0;
	list-style: none;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	overflow: hidden;
}

.dmlty-row {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	min-block-size: 52px;
	padding: 8px var(--dmlty-card-pad);
	border-block-end: 1px solid var(--dmlty-line-soft);
	color: var(--dmlty-text);
}

.dmlty-rows > li:last-child .dmlty-row {
	border-block-end: 0;
}

/* داخلِ یک کارت، فهرست دیگر قاب و زمینهٔ خودش را نمی‌خواهد. */
.dmlty-rows-flat {
	border: 0;
	border-radius: 0;
	background: transparent;
	overflow: visible;
}

.dmlty-rows-flat .dmlty-row {
	padding-inline: 0;
}

a.dmlty-row:hover {
	background: var(--dmlty-surface-2);
}

.dmlty-row-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 32px;
	block-size: 32px;
	flex: none;
	border-radius: 9px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-row-label {
	flex: 1 1 auto;
	min-inline-size: 0;
	font-size: 13.5px;
	font-weight: 600;
}

.dmlty-row-meta {
	flex: none;
	color: var(--dmlty-muted);
	font-size: 12.5px;
	font-variant-numeric: tabular-nums;
}

.dmlty-row-chev {
	display: inline-flex;
	flex: none;
	color: var(--dmlty-muted);
}

.dmlty-row-danger,
.dmlty-row-danger .dmlty-row-label {
	color: var(--dmlty-danger);
}

.dmlty-row-danger .dmlty-row-icon {
	background: var(--dmlty-danger-bg);
	color: var(--dmlty-danger);
}

/* کارتِ کاربر بالای پروفایل */
.dmlty-me {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding: var(--dmlty-card-pad);
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	color: var(--dmlty-text);
	box-shadow: var(--dmlty-shadow-sm);
}

.dmlty-me:hover {
	border-color: var(--dmlty-brand);
}

.dmlty-me-avatar {
	display: inline-flex;
	inline-size: 52px;
	block-size: 52px;
	flex: none;
}

.dmlty-me-avatar img {
	inline-size: 100%;
	block-size: 100%;
	border-radius: 50%;
	object-fit: cover;
}

.dmlty-me-body {
	flex: 1 1 auto;
	min-inline-size: 0;
}

.dmlty-me-name {
	font-size: 15px;
	font-weight: 700;
}

.dmlty-me-sub {
	color: var(--dmlty-muted);
	font-size: 12.5px;
}

/* جایگزینِ نبودِ تصویر: حرفِ اولِ نام. هیچ درخواستِ بیرونی، هیچ گراواتاری. */
.dmlty-avatar-letter {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 100%;
	block-size: 100%;
	border-radius: 50%;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
	font-size: 20px;
	font-weight: 700;
}

.dmlty-avatarfield {
	display: flex;
	align-items: flex-start;
	gap: var(--dmlty-gap);
}

.dmlty-avatar-preview,
.dmlty-avatar-sm {
	display: inline-flex;
	inline-size: 64px;
	block-size: 64px;
	flex: none;
}

.dmlty-avatar-sm {
	inline-size: 40px;
	block-size: 40px;
}

.dmlty-avatar-preview img,
.dmlty-avatar-sm img {
	inline-size: 100%;
	block-size: 100%;
	border-radius: 50%;
	object-fit: cover;
}

.dmlty-avatar-controls {
	flex: 1 1 auto;
	min-inline-size: 0;
}

.dmlty-avatar-controls input[type="file"] {
	max-inline-size: 100%;
	font-size: 12.5px;
}

.dmlty-avatar-remove {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-block-start: var(--dmlty-gap-xs);
	font-size: 12.5px;
	color: var(--dmlty-muted);
}

/*
 * ⚠ وکتورهای آماده خودشان دایرهٔ پس‌زمینه‌ای کامل دارند و بخشی از طرح عمداً از
 * لبه‌اش بیرون می‌زند. سه قابِ بالا (پیش‌نمایش/کوچک/کارتِ شناسه) روی هر <img>
 * داخلشان گردی و کراپ می‌گذارند؛ این کلاس دقیقاً همان‌ها را برای این تصویر خنثی
 * می‌کند — وگرنه دقیقاً همان بخشِ بیرون‌زده قطع می‌شود.
 */
.dmlty-avatar-preview img.dmlty-avatar-preset,
.dmlty-avatar-sm img.dmlty-avatar-preset,
.dmlty-me-avatar img.dmlty-avatar-preset,
.dmlty-idcard-avatar img.dmlty-avatar-preset,
.dmlty-topbar-avatar img.dmlty-avatar-preset {
	border-radius: 0;
	object-fit: contain;
}

/* شبکهٔ وکتورهای آمادهٔ حساب کاربری. */
.dmlty-avatar-presets {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-block-start: var(--dmlty-gap-xs);
}

/*
 * ⚠ خودِ رادیو `screen-reader-text` است — نامِ گزینه (برای صفحه‌خوان) از رویِ
 * alt عکس ساخته می‌شود، نه یک برچسبِ دیده‌شدنی؛ کاربر خودش تصویرها را می‌شناسد
 * و ردیفی از اسم زیرِ هر کدام فقط شلوغی اضافه می‌کرد. انتخاب‌شده با قاب+زمینه
 * گفته می‌شود، نه با نمایشِ نقطهٔ رادیو.
 */
.dmlty-avatar-preset-item {
	display: flex;
	align-items: center;
	justify-content: center;
	inline-size: 52px;
	block-size: 52px;
	padding: 4px;
	border: 1px solid var(--dmlty-line);
	border-radius: 50%;
	cursor: pointer;
}

.dmlty-avatar-preset-item:has(input:checked) {
	border-color: var(--dmlty-brand);
	background: var(--dmlty-tint);
	box-shadow: 0 0 0 2px var(--dmlty-tint);
}

.dmlty-avatar-preset-item:hover {
	border-color: var(--dmlty-brand);
}

.dmlty-avatar-preset-item img {
	inline-size: 100%;
	block-size: 100%;
	object-fit: contain;
}

.dmlty-avatar-preset-none {
	display: flex;
	align-items: center;
	justify-content: center;
	inline-size: 100%;
	block-size: 100%;
	color: var(--dmlty-muted);
	font-size: 10.5px;
}

/* ═══════════════════════ چیدمانِ دوستونیِ نامتقارن ═══════════════════════ */

/*
 * ⚠ یک الگو برای همهٔ تب‌هایی که یک کارِ اصلی و چند کارتِ کوتاهِ کناری دارند —
 * صرافی، خبرها، معرفی دوستان.
 *
 * کارتِ چندسطری در عرضِ کامل کشیده و توخالی می‌شود؛ همان کارت در یک ستونِ باریک
 * جمع و خوانا می‌ماند و کارِ اصلیِ صفحه فضای بیشتری می‌گیرد. روی موبایل یک ستون
 * است و هیچ چیزی جابه‌جا نمی‌شود.
 */
.dmlty-split {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--dmlty-gap);
	align-items: start;
}

.dmlty-split-side,
.dmlty-split-main {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap);
	min-inline-size: 0;
}

@media screen and (min-width: 900px) {
	.dmlty-split {
		grid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr);
		gap: var(--dmlty-gap-lg);
	}

	/* وقتی ستونِ اصلی اولِ سند است، سهمِ ستون‌ها هم باید برعکس شود. */
	.dmlty-split-flip {
		grid-template-columns: minmax(0, 1.18fr) minmax(0, 0.82fr);
	}
}

/* موجودی‌های کنارِ فرمِ تبدیل: ستونِ باریک جای سه کاشیِ پهلوبه‌پهلو ندارد. */
.dmlty-balances-tight {
	grid-template-columns: repeat(auto-fit, minmax(min(120px, 100%), 1fr));
}

/* دو انتخابگرِ «از» و «به»، با نشانهٔ تبدیل بینشان. */
.dmlty-swap {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
	align-items: end;
	gap: var(--dmlty-gap-xs);
}

.dmlty-swap .dmlty-field {
	margin: 0;
}

.dmlty-swap-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 34px;
	block-size: 42px;
	color: var(--dmlty-muted);
}

/* ═══════════════════════════════ تاریخچه ═══════════════════════════════ */

/*
 * خطِ زمانِ گردشِ امتیاز.
 *
 * ⚠ خطِ عمودی با شبه‌عنصر کشیده می‌شود نه با یک عنصرِ اضافه، و روی آخرین سطر قطع
 * می‌شود تا در هوا رها نماند.
 */
/*
 * ⚠ فهرست تمامِ عرضِ کارت را می‌گیرد و مبلغ به لبهٔ پایانی می‌چسبد — همان چیدمانی
 * که هر دفترِ حساب دارد.
 *
 * سقفِ عرض روی خودِ فهرست نیست، روی **ستونِ متن** است: با سقف روی کلِ فهرست، مبلغ
 * وسطِ کارت می‌ایستاد و سمتِ دیگر خالی می‌ماند؛ بدونِ هیچ سقفی هم سطرِ متن آن‌قدر
 * دراز می‌شد که خواندنش سخت شود. سقف روی متن، هر دو را حل می‌کند.
 */
.dmlty-track {
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-track-row {
	position: relative;
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding-block: 12px;
}

/*
 * خطِ رابطِ بینِ دو نشانگر.
 *
 * ⚠ فاصله از لبهٔ **شروع** حساب می‌شود که در راست‌به‌چپ همان راست است؛ نسخهٔ پیشین
 * `calc(100% - 16px)` می‌گذاشت و خط از زیرِ نشانگر به لبهٔ مقابلِ کارت می‌پرید —
 * همان خطِ عمودیِ سرگردانی که در تصویر دیده شد.
 */
.dmlty-track-row::before {
	content: "";
	position: absolute;
	inset-block-start: 34px;
	inset-block-end: -12px;
	inset-inline-start: 15px;
	inline-size: 2px;
	background: var(--dmlty-line);
}

.dmlty-track-row:last-child::before {
	display: none;
}

.dmlty-track-mark {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 32px;
	block-size: 32px;
	flex: none;
	border-radius: 50%;
	background: var(--dmlty-surface);
	box-shadow: 0 0 0 2px var(--dmlty-coin, var(--dmlty-brand));
	color: var(--dmlty-coin, var(--dmlty-brand));
	z-index: 1;
}

.dmlty-track-body {
	display: flex;
	flex-direction: column;
	gap: 1px;
	min-inline-size: 0;
	max-inline-size: 540px;
}

.dmlty-track-what {
	font-size: 13.5px;
	font-weight: 700;
	line-height: 1.7;
}

.dmlty-track-meta {
	color: var(--dmlty-muted);
	font-size: 11.5px;
	line-height: 1.7;
}

/*
 * ⚠ شکستنِ کلمه اینجا خاموش می‌شود.
 *
 * ریشهٔ پنل `overflow-wrap: anywhere` دارد تا رشتهٔ بی‌فاصله صفحه را نشکند، ولی
 * همان قاعده روی این ستونِ باریک مبلغ را وسطِ عدد می‌شکست — «۲,۰۰۰,۰۰۰ تومان» دو
 * تکه می‌شد. مبلغ و نامِ واحد هرگز نباید شکسته شوند.
 */
.dmlty-track-side {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	flex: none;
	white-space: nowrap;
	overflow-wrap: normal;
}

.dmlty-track-coin {
	color: var(--dmlty-muted);
	font-size: 11px;
	line-height: 1.6;
}

/* ردیفِ پاداشِ معرفیِ در‌انتظار (۱.۹۹.۰): کوینی نگرفته، پس نشانگرش زردِ هشدار است نه رنگِ واحد. */
.dmlty-track-pending .dmlty-track-mark {
	background: var(--dmlty-warn-bg);
	box-shadow: none;
	color: var(--dmlty-warn);
}

.dmlty-track-pending-badge {
	display: inline-flex;
	align-items: center;
	border-radius: 999px;
	padding: 2px 10px;
	background: var(--dmlty-warn-bg);
	color: var(--dmlty-warn);
	font-size: 11px;
	font-weight: 600;
	white-space: nowrap;
}

/* ═══════════════════════════════ فید ═══════════════════════════════ */

.dmlty-feed {
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-feed > li {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding-block: 11px;
	border-block-end: 1px solid var(--dmlty-line-soft);
}

.dmlty-feed > li:last-child {
	border-block-end: 0;
	padding-block-end: 0;
}

.dmlty-feed > li:first-child {
	padding-block-start: 0;
}

.dmlty-feed-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 32px;
	block-size: 32px;
	flex: none;
	border-radius: 9px;
}

.dmlty-feed-in .dmlty-feed-icon {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-feed-out .dmlty-feed-icon {
	background: var(--dmlty-danger-bg);
	color: var(--dmlty-danger);
}

.dmlty-feed-body {
	flex: 1 1 auto;
	min-inline-size: 0;
}

.dmlty-feed-what {
	font-size: 13.5px;
	font-weight: 600;
}

.dmlty-feed-meta {
	color: var(--dmlty-muted);
	font-size: 12px;
}

.dmlty-feed-amount {
	flex: none;
	font-size: 13.5px;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.dmlty-feed-in .dmlty-feed-amount {
	color: var(--dmlty-ok);
}

.dmlty-feed-out .dmlty-feed-amount {
	color: var(--dmlty-danger);
}

/* ═══════════════════════ جایزه‌های دریافتی ═══════════════════════ */

/*
 * ⚠ شبکه، نه ستونی از کارت‌های تمام‌عرض. هر دریافت سه تکه اطلاعات دارد — نام،
 * تاریخ، وضعیت — و کارتِ تمام‌عرضِ دسکتاپ برایش یک نوارِ کشیدهٔ خالی می‌ساخت.
 */
.dmlty-tickets {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr));
	gap: var(--dmlty-gap);
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-ticket {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--dmlty-gap-sm);
	overflow: hidden;
	padding: var(--dmlty-card-pad);
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	box-shadow: var(--dmlty-shadow-sm);
	transition: transform 0.16s ease, box-shadow 0.16s ease;
}

.dmlty-ticket:hover {
	transform: translateY(-2px);
	box-shadow: var(--dmlty-shadow);
}

/* نوارِ رنگیِ لبه، هم‌رنگِ وضعیت. برچسبِ متنیِ وضعیت هم همیشه هست. */
.dmlty-ticket::before {
	content: "";
	position: absolute;
	inset-block: 0;
	inset-inline-start: 0;
	inline-size: 4px;
}

.dmlty-ticket-ok::before {
	background: var(--dmlty-ok);
}

.dmlty-ticket-wait::before {
	background: var(--dmlty-warn);
}

.dmlty-ticket-bad::before {
	background: var(--dmlty-danger);
}

.dmlty-ticket-top {
	display: flex;
	align-items: flex-start;
	gap: var(--dmlty-gap-sm);
	inline-size: 100%;
}

.dmlty-ticket-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 40px;
	block-size: 40px;
	flex: none;
	border-radius: 12px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-ticket-head {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-inline-size: 0;
}

.dmlty-ticket-title {
	font-size: 14.5px;
	font-weight: 700;
	line-height: 1.6;
	color: var(--dmlty-text);
}

.dmlty-ticket-date {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	color: var(--dmlty-muted);
	font-size: 12px;
	font-variant-numeric: tabular-nums;
}

.dmlty-ticket-state {
	display: inline-flex;
	align-items: center;
	padding: 4px 11px;
	border-radius: var(--dmlty-radius-pill);
	font-size: 12px;
	font-weight: 700;
}

.dmlty-ticket-ok .dmlty-ticket-state {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-ticket-wait .dmlty-ticket-state {
	background: var(--dmlty-warn-bg);
	color: var(--dmlty-warn);
}

.dmlty-ticket-bad .dmlty-ticket-state {
	background: var(--dmlty-danger-bg);
	color: var(--dmlty-danger);
}

.dmlty-ticket .dmlty-code {
	inline-size: 100%;
	margin-block-start: auto;
}

/* ═══════════════════════════════ کد جایزه ═══════════════════════════════ */

.dmlty-code {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	flex-wrap: wrap;
	margin-block-start: var(--dmlty-gap-sm);
	padding: 10px 12px;
	border: 1px dashed var(--dmlty-line);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
}

.dmlty-code bdi {
	font-size: 13px;
	font-weight: 700;
	word-break: break-all;
	min-inline-size: 0;
}

/* ═══════════════════════════════ فرم ═══════════════════════════════ */

.dmlty-form {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap);
}

.dmlty-field {
	display: flex;
	flex-direction: column;
	gap: 5px;
	margin: 0 0 var(--dmlty-gap-sm);
}

.dmlty-field > label,
.dmlty-field-label {
	font-size: 12.5px;
	font-weight: 600;
	color: var(--dmlty-text);
}

.dmlty-field input,
.dmlty-field select,
.dmlty-field textarea {
	inline-size: 100%;
	min-block-size: 42px;
	padding: 8px 12px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface);
	color: var(--dmlty-text);
	font: inherit;
	font-size: 13.5px;
}

.dmlty-field input[type="checkbox"] {
	inline-size: auto;
	min-block-size: 0;
	accent-color: var(--dmlty-brand);
}

.dmlty-field textarea {
	min-block-size: 84px;
	resize: vertical;
}

.dmlty-field input:focus,
.dmlty-field select:focus,
.dmlty-field textarea:focus {
	border-color: var(--dmlty-brand);
	outline: none;
	box-shadow: 0 0 0 3px var(--dmlty-tint);
}

.dmlty-field-hint {
	font-size: 12px;
	color: var(--dmlty-muted);
}

.dmlty-field-error input,
.dmlty-field-error select {
	border-color: var(--dmlty-danger);
}

.dmlty-field-error .dmlty-field-hint {
	color: var(--dmlty-danger);
}

.dmlty-required {
	color: var(--dmlty-danger);
}

/* سه انتخابگرِ تاریخ در یک ردیف. ⚠ min-inline-size روی هر ستون لازم است، وگرنه
   محتوای هر انتخابگر عرضش را از سهمِ شبکه بیرون می‌برد. */
.dmlty-datefield {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: var(--dmlty-gap-xs);
}

.dmlty-datefield select {
	min-inline-size: 0;
	inline-size: 100%;
	min-block-size: 42px;
	padding: 8px 10px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface);
	color: var(--dmlty-text);
	font: inherit;
	font-size: 13.5px;
}

/* ═══════════════════════ اطلاعات حساب ═══════════════════════ */

/* کارتِ شناسایی بالای صفحه. */
.dmlty-idcard {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap);
	flex-wrap: wrap;
}

.dmlty-idcard-avatar {
	display: inline-flex;
	inline-size: 62px;
	block-size: 62px;
	flex: none;
}

.dmlty-idcard-avatar img {
	inline-size: 100%;
	block-size: 100%;
	border-radius: 50%;
	object-fit: cover;
}

.dmlty-idcard-body {
	display: flex;
	flex-direction: column;
	flex: 1 1 140px;
	min-inline-size: 0;
}

.dmlty-idcard-name {
	font-size: 17px;
	font-weight: 700;
	color: var(--dmlty-text);
}

.dmlty-idcard-sub {
	color: var(--dmlty-muted);
	font-size: 12.5px;
}

.dmlty-idcard-edit {
	flex: none;
}

/* گروه‌های اطلاعات، خودشان یک شبکه‌اند: روی دسکتاپ دو ستون کنارِ هم. */
.dmlty-facts-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--dmlty-gap);
}

.dmlty-facts-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 32px;
	block-size: 32px;
	flex: none;
	border-radius: 9px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-facts-card .dmlty-card-head {
	justify-content: flex-start;
	gap: var(--dmlty-gap-sm);
}

/*
 * ⚠ کاشی، نه ردیفِ برچسب-و-مقدار.
 *
 * ردیفِ افقی روی نامِ بلندِ فیلد و مقدارِ بلند هر دو را به هم می‌چسباند و روی دسکتاپ
 * یک نوارِ کشیدهٔ خالی وسطش می‌ماند. کاشیِ دوخطی هر دو را جا می‌دهد و شبکه خودش را
 * با عرض تنظیم می‌کند.
 */
.dmlty-facts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(180px, 100%), 1fr));
	gap: var(--dmlty-gap-sm);
	margin: 0;
	padding: 0;
}

.dmlty-fact {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-inline-size: 0;
	padding: 11px 13px;
	border: 1px solid var(--dmlty-line-soft);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
}

.dmlty-fact dt {
	color: var(--dmlty-muted);
	font-size: 11.5px;
	font-weight: 600;
}

.dmlty-fact dd {
	margin: 0;
	font-size: 14px;
	font-weight: 700;
	color: var(--dmlty-text);
	min-inline-size: 0;
}

/* مقدارِ خالی نباید هم‌وزنِ یک مقدارِ واقعی دیده شود. */
.dmlty-fact.is-empty dd {
	color: var(--dmlty-muted);
	font-weight: 500;
}

/* تصویر داخلِ کاشی از قالبِ دوخطی بیرون می‌زند؛ ردیفی می‌ماند. */
.dmlty-fact .dmlty-avatar-sm {
	margin-block-start: 2px;
}

@media screen and (min-width: 900px) {
	.dmlty-facts-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* ═══════════════════ صفحهٔ مهمان و صفحهٔ دعوت ═══════════════════ */

/*
 * ⚠ تنها صفحه‌هایی از پنل که کارشان **قانع‌کردن** است، نه گزارش‌دادن. پس برخلافِ
 * بقیه، یک ستونِ متمرکز و وسط‌چین‌اند با یک کنشِ روشن — نه شبکه‌ای از کارت.
 */
.dmlty-welcome {
	position: relative;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	max-inline-size: 560px;
	margin-inline: auto;
	padding: var(--dmlty-gap-lg) var(--dmlty-card-pad);
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	background: var(--dmlty-surface);
	box-shadow: var(--dmlty-shadow);
	text-align: center;
}

/*
 * هالهٔ نرمِ بالای کارت — تنها زینتِ صفحه.
 *
 * ⚠ گرادیانِ محو، نه دایرهٔ توپُر. دایرهٔ توپُری که لبهٔ کارت می‌بُردش یک کمانِ تیزِ
 * بریده می‌ساخت و کارت «ناقص» به نظر می‌رسید، نه تزئین‌شده. گرادیان لبه ندارد پس
 * چیزی هم برای بریده‌شدن ندارد.
 */
.dmlty-welcome::before {
	content: "";
	position: absolute;
	inset-block-start: 0;
	inset-inline: 0;
	block-size: 190px;
	background: radial-gradient(120% 100% at 50% 0, var(--dmlty-tint) 0, transparent 72%);
	pointer-events: none;
}

.dmlty-welcome > * {
	position: relative;
}

.dmlty-welcome-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 64px;
	block-size: 64px;
	border-radius: 20px;
	background: var(--dmlty-brand);
	color: var(--dmlty-on-brand);
	box-shadow: var(--dmlty-shadow);
}

.dmlty-welcome-title {
	margin: var(--dmlty-gap-xs) 0 0;
	font-size: 19px;
	font-weight: 700;
	color: var(--dmlty-text);
	text-wrap: balance;
}

.dmlty-welcome-text {
	margin: 0;
	max-inline-size: 44ch;
	color: var(--dmlty-muted);
	font-size: 13.5px;
	line-height: 2;
}

.dmlty-perks {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap-xs);
	inline-size: 100%;
	margin: var(--dmlty-gap-xs) 0 0;
	padding: 0;
	list-style: none;
}

.dmlty-perk {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding: 10px 12px;
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
	font-size: 13px;
	font-weight: 600;
	text-align: start;
}

.dmlty-perk-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 34px;
	block-size: 34px;
	flex: none;
	border-radius: 10px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-welcome-code {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 2px;
	padding: 10px 20px;
	border: 1px dashed var(--dmlty-brand);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-tint);
}

.dmlty-welcome-code-cap {
	color: var(--dmlty-muted);
	font-size: 11.5px;
}

.dmlty-welcome-code-value {
	font-size: 18px;
	font-weight: 700;
	letter-spacing: 0.08em;
	color: var(--dmlty-brand);
}

.dmlty-welcome-actions {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap-xs);
	inline-size: 100%;
	margin-block-start: var(--dmlty-gap-xs);
}

.dmlty-welcome-go {
	inline-size: 100%;
}

@media screen and (min-width: 560px) {
	.dmlty-welcome {
		padding: 36px 32px;
	}

	.dmlty-welcome-title {
		font-size: 22px;
	}

	.dmlty-welcome-actions {
		flex-direction: row;
		justify-content: center;
	}

	.dmlty-welcome-go {
		inline-size: auto;
		min-inline-size: 190px;
	}
}

/* ═══════════════════════════════ حالتِ خالی ═══════════════════════════════ */

.dmlty-empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	padding: var(--dmlty-gap-lg) var(--dmlty-gap);
	text-align: center;
	color: var(--dmlty-muted);
	font-size: 13px;
}

.dmlty-empty-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 56px;
	block-size: 56px;
	border-radius: 50%;
	background: var(--dmlty-surface-3);
	color: var(--dmlty-muted);
}

.dmlty-empty-title {
	color: var(--dmlty-text);
	font-size: 14.5px;
	font-weight: 700;
}

/* ═══════════════════════════════ پیام ═══════════════════════════════ */

.dmlty-flash {
	margin: 0 0 var(--dmlty-gap);
	padding: 11px var(--dmlty-gap);
	border-radius: var(--dmlty-radius-ctl);
	font-size: 13px;
	font-weight: 600;
}

.dmlty-flash-ok {
	background: var(--dmlty-ok-bg);
	color: var(--dmlty-ok);
}

.dmlty-flash-bad {
	background: var(--dmlty-danger-bg);
	color: var(--dmlty-danger);
}

.dmlty-status {
	margin: var(--dmlty-gap-xs) 0 0;
	font-size: 12.5px;
	color: var(--dmlty-muted);
}

/* ═══════════════════════════════ پالایه ═══════════════════════════════ */

.dmlty-chips {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	flex-wrap: wrap;
}

/*
 * ردیفِ ابزارِ بالای فهرست: شمارش در یک سو، پیوند در سوی دیگر.
 *
 * ⚠ ستونِ محتوا یک فلکسِ عمودی است و هر فرزندِ تنها در آن **کشیده** می‌شود. یک
 * تراشهٔ لخت آنجا به تمامِ عرضِ صفحه می‌رسید و شکلِ یک دکمهٔ غول‌پیکر می‌گرفت.
 */
.dmlty-toolbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	flex-wrap: wrap;
}

.dmlty-toolbar-count {
	color: var(--dmlty-muted);
	font-size: 12.5px;
	font-weight: 600;
}

.dmlty-toolbar .dmlty-chip {
	flex: none;
	gap: 6px;
}

.dmlty-chip {
	display: inline-flex;
	align-items: center;
	min-block-size: 32px;
	padding: 0 14px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-surface);
	color: var(--dmlty-muted);
	font-size: 12.5px;
	font-weight: 600;
}

.dmlty-chip:hover {
	border-color: var(--dmlty-brand);
	color: var(--dmlty-brand);
}

.dmlty-chip.is-active {
	background: var(--dmlty-brand);
	border-color: var(--dmlty-brand);
	color: var(--dmlty-on-brand);
}

/*
 * پالایهٔ بخش‌بندی‌شده: تراشه‌ها داخلِ یک ریلِ واحد می‌نشینند، نه پراکنده روی زمینه.
 * روی نمایشگرِ باریک ریل افقی می‌لغزد تا هیچ‌وقت به سطرِ دوم نشکند.
 */
.dmlty-chips-seg {
	flex-wrap: nowrap;
	gap: 3px;
	padding: 4px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-surface);
	overflow-x: auto;
	scrollbar-width: none;
}

.dmlty-chips-seg::-webkit-scrollbar {
	display: none;
}

.dmlty-chips-seg .dmlty-chip {
	flex: 1 1 auto;
	justify-content: center;
	gap: 6px;
	min-block-size: 34px;
	white-space: nowrap;
	border-color: transparent;
	background: transparent;
}

.dmlty-chips-seg .dmlty-chip:hover {
	background: var(--dmlty-surface-2);
	border-color: transparent;
}

.dmlty-chips-seg .dmlty-chip.is-active {
	background: var(--dmlty-brand);
	border-color: transparent;
}

/* شمارِ هر دسته کنارِ نامش — عددی که تصمیمِ کلیک را همان‌جا می‌گیرد. */
.dmlty-chip-count {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-inline-size: 20px;
	padding-inline: 5px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-surface-3);
	color: var(--dmlty-muted);
	font-size: 11px;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.dmlty-chip.is-active .dmlty-chip-count {
	background: rgba(255, 255, 255, 0.22);
	color: #fff;
}

/* ═══════════════════════════════ صرافی ═══════════════════════════════ */

.dmlty-rates {
	margin: 0;
	padding: 0;
	list-style: none;
}

.dmlty-rate {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--dmlty-gap-sm);
	padding-block: 10px;
	border-block-end: 1px solid var(--dmlty-line-soft);
}

.dmlty-rate:last-child {
	border-block-end: 0;
	padding-block-end: 0;
}

.dmlty-rate-name {
	font-size: 13.5px;
	font-weight: 600;
}

.dmlty-rate-value {
	color: var(--dmlty-muted);
	font-size: 13px;
	font-variant-numeric: tabular-nums;
}

.dmlty-ex-preview {
	margin: 0;
	min-block-size: 20px;
	color: var(--dmlty-brand);
	font-size: 12.5px;
	font-weight: 600;
}

/* ═══════════════════════════════ پابرگ ═══════════════════════════════ */

.dmlty-credit {
	margin: 0;
	text-align: center;
	color: var(--dmlty-muted);
	font-size: 11.5px;
}

/* ═════════════════════════ گردونهٔ شانس ═════════════════════════ */

/*
 * ⚠ چرخ و اطلاعاتش دو ستونِ کنارِ هم‌اند، نه یک ستونِ عمودیِ بلند. روی دسکتاپ نسخهٔ
 * ستونی یعنی یک چرخِ کوچک وسطِ صفحه و یک ستونِ متنِ بلند زیرش — بیشترِ صفحه خالی و
 * دکمهٔ چرخاندن زیرِ خطِ دید.
 */
.dmlty-wheel-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--dmlty-gap-lg);
	align-items: center;
}

.dmlty-wheel-stage {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--dmlty-gap);
}

/* هالهٔ نرمِ پشتِ چرخ. تزئینی محض و بیرون از جریانِ کلیک. */
.dmlty-wheel-glow {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-start: 50%;
	transform: translate(50%, -50%);
	inline-size: 84%;
	aspect-ratio: 1;
	border-radius: 50%;
	background: var(--dmlty-tint-2);
	filter: blur(28px);
	pointer-events: none;
}

.dmlty-wheel {
	position: relative;
	z-index: 1;
	inline-size: min(100%, 300px);
	margin-inline: auto;
	aspect-ratio: 1;
}

/*
 * ⚠ گذارِ چرخش روی **همین پوشش** است، نه روی خودِ SVG.
 *
 * خطای واقعیِ کشف‌شده: اسکریپت `transform` را روی این عنصر می‌نویسد ولی گذار روی
 * `svg` تعریف شده بود. نتیجه‌اش این بود که چرخ **آنی می‌پرید** و هیچ چرخشی دیده
 * نمی‌شد؛ بدتر اینکه `transitionend` هرگز شلیک نمی‌شد و پیامِ برنده تا مهلتِ
 * پشتیبانِ پنج‌ثانیه‌ای منتظر می‌ماند. هیچ خطایی هم در کنسول نبود.
 */
.dmlty-wheel-spin {
	display: block;
	inline-size: 100%;
	block-size: 100%;
	transition: transform 4.4s cubic-bezier(0.15, 0.85, 0.25, 1);
	will-change: transform;
}

.dmlty-wheel-face {
	inline-size: 100%;
	block-size: 100%;
	border-radius: 50%;
	box-shadow: var(--dmlty-shadow-lg);
}

.dmlty-wheel-label {
	font-size: 8px;
	font-weight: 700;
	fill: #fff;
}

/* خطِ مرزِ قاچ‌ها: بدونِ آن دو رنگِ نزدیک روی مرز در هم می‌روند. */
.dmlty-wheel-slices path {
	stroke: var(--dmlty-surface);
	stroke-width: 1.5;
}

.dmlty-wheel-rim {
	fill: none;
	stroke: var(--dmlty-surface);
	stroke-width: 6;
}

.dmlty-wheel-hub {
	fill: var(--dmlty-surface);
	stroke: var(--dmlty-line);
	stroke-width: 2;
}

.dmlty-wheel-core {
	fill: var(--dmlty-brand);
}

/* سوزن، بالای چرخ. زاویهٔ صفرِ برش‌ها هم از همین‌جا حساب شده است. */
.dmlty-wheel-pin {
	position: absolute;
	inset-block-start: -8px;
	/* ⚠ نصفِ عرضِ خودِ سوزن (۲۴ پیکسل) کسر می‌شود، نه translateX نیم‌درصدی: جهتِ
	   جابه‌جاییِ درصدی در راست‌به‌چپ برعکس می‌شود و سوزن از مرکز بیرون می‌افتد. */
	inset-inline-start: calc(50% - 12px);
	inline-size: 0;
	block-size: 0;
	border-inline: 12px solid transparent;
	border-block-start: 24px solid var(--dmlty-accent);
	filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.25));
	z-index: 3;
}

/* ───────── ستونِ اطلاعات ───────── */

.dmlty-wheel-panel {
	display: flex;
	flex-direction: column;
	gap: var(--dmlty-gap-sm);
	min-inline-size: 0;
}

.dmlty-wheel-kicker {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	align-self: flex-start;
	padding: 4px 11px;
	border-radius: var(--dmlty-radius-pill);
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
	font-size: 11.5px;
	font-weight: 700;
}

.dmlty-wheel-title {
	margin: 0;
	font-size: 20px;
	font-weight: 700;
	color: var(--dmlty-text);
}

.dmlty-wheel-stats {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr));
	gap: var(--dmlty-gap-sm);
	margin-block: var(--dmlty-gap-xs);
}

.dmlty-wheel-stat {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-sm);
	padding: 12px 14px;
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
}

.dmlty-wheel-stat-art {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 34px;
	block-size: 34px;
	flex: none;
	border-radius: 10px;
	background: var(--dmlty-tint);
	color: var(--dmlty-brand);
}

.dmlty-wheel-stat-body {
	display: flex;
	flex-direction: column;
	min-inline-size: 0;
}

.dmlty-wheel-stat-num {
	font-size: 19px;
	font-weight: 700;
	line-height: 1.35;
	color: var(--dmlty-text);
	font-variant-numeric: tabular-nums;
}

.dmlty-wheel-stat-cap {
	color: var(--dmlty-muted);
	font-size: 11.5px;
	line-height: 1.5;
}

.dmlty-wheel-go {
	min-block-size: 50px;
	font-size: 15px;
}

.dmlty-wheel-result {
	margin: 0;
	text-align: center;
	font-size: 14px;
	font-weight: 700;
	color: var(--dmlty-brand);
	min-block-size: 24px;
}

/* ───────── فهرستِ جایزه‌ها ───────── */

.dmlty-wheel-prizes {
	margin-block-start: var(--dmlty-gap-lg);
	padding-block-start: var(--dmlty-gap);
	border-block-start: 1px solid var(--dmlty-line);
}

.dmlty-wheel-prizes-cap {
	margin: 0 0 var(--dmlty-gap-sm);
	color: var(--dmlty-muted);
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.03em;
}

.dmlty-wheel-legend {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(180px, 100%), 1fr));
	gap: var(--dmlty-gap-xs);
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * ⚠ رنگِ هر ردیف همان رنگِ خانهٔ خودش روی چرخ است، و شمارهٔ خانه هم کنارش نوشته
 * می‌شود: کسی که رنگ‌ها را متفاوت نمی‌بیند از روی شماره خانه را پیدا می‌کند.
 */
.dmlty-wheel-prize {
	display: flex;
	align-items: center;
	gap: var(--dmlty-gap-xs);
	min-inline-size: 0;
	padding: 8px 10px;
	border-radius: var(--dmlty-radius-ctl);
	background: var(--dmlty-surface-2);
	font-size: 12.5px;
}

.dmlty-wheel-prize-dot {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	inline-size: 22px;
	block-size: 22px;
	flex: none;
	border-radius: 7px;
	background: var(--dmlty-slice, var(--dmlty-brand));
	color: #fff;
	font-size: 11px;
	font-weight: 700;
}

.dmlty-wheel-prize-name {
	min-inline-size: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* ارزشِ خانه، ته ردیف و کم‌رنگ‌تر از نامش. */
.dmlty-wheel-prize-value {
	margin-inline-start: auto;
	padding-inline-start: var(--dmlty-gap-xs);
	flex: none;
	color: var(--dmlty-muted);
	font-size: 11.5px;
	font-weight: 700;
	white-space: nowrap;
}

/* از تبلت به بالا چرخ و اطلاعاتش کنارِ هم می‌نشینند. */
@media screen and (min-width: 768px) {
	.dmlty-wheel-grid {
		grid-template-columns: minmax(0, 320px) minmax(0, 1fr);
		gap: var(--dmlty-gap-lg);
	}

	.dmlty-wheel {
		inline-size: min(100%, 320px);
	}

	.dmlty-wheel-title {
		font-size: 24px;
	}
}

/* ═══════════════════════════ حالتِ جاسازی‌شده ═══════════════════════════ */

/* ⚠ داخلِ قالبِ خریدار هیچ چیزی نمی‌چسبد و نمی‌شناورد؛ همان اجزا در جریانِ عادیِ
   صفحه. حاشیه و گوشه هم دارد تا از محتوای خودِ سایت جدا دیده شود. */
.dmlty-app-embedded {
	border: 1px solid var(--dmlty-line);
	border-radius: var(--dmlty-radius);
	overflow: hidden;
	background: var(--dmlty-bg);
}

.dmlty-app-embedded .dmlty-main {
	padding: var(--dmlty-pad);
	min-block-size: 0;
}

/* ═══════════════════════════════ تبلت ═══════════════════════════════ */

/*
 * ۷۶۸ تا ۱۰۲۳: فضای افقی برای دو ستون هست ولی برای ستونِ کناریِ ۲۶۴ پیکسلی نه.
 * پس نوارِ پایین می‌ماند و فقط محتوا دو ستونی می‌شود.
 */
@media screen and (min-width: 768px) {
	.dmlty-app {
		--dmlty-pad: 24px;
		--dmlty-card-pad: 20px;
		--dmlty-max: 860px;
	}

	.dmlty-home {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.dmlty-shop-text {
		display: inline;
	}

	.dmlty-topbar-title {
		font-size: 17px;
	}

	.dmlty-hero {
		padding: 30px var(--dmlty-card-pad);
	}

	.dmlty-hero-title {
		font-size: 20px;
	}

	.dmlty-fact {
		padding-block: 11px;
	}
}

/* ═══════════════════════════════ دسکتاپ ═══════════════════════════════ */

/*
 * از ۱۰۲۴: همان عنصرِ ناوبری ستونِ کناری می‌شود، نوارِ پایین کاملاً از بین می‌رود
 * (نه پنهان — از درختِ دسترس‌پذیری هم بیرون می‌رود، پس صفحه‌خوان دو ناوبریِ تکراری
 * نمی‌خواند) و میان‌برهای زیرصفحه‌ها باز می‌شوند.
 *
 * ⚠ چیدمان با ناحیه‌های نام‌دار است، پس ترتیبِ عناصر در سند اهمیتی برای نتیجهٔ
 * دیداری ندارد: حالتِ شورت‌کد ناوبری را بعد از محتوا چاپ می‌کند و این کلاس اجازهٔ
 * عوض‌کردنِ آن پوشش را ندارد. همان‌جا هم ستونِ کناری سرِ جای درستش می‌نشیند.
 */
@media screen and (min-width: 1024px) {
	.dmlty-app {
		--dmlty-pad: 28px;
		--dmlty-card-pad: 20px;
		--dmlty-max: none;
		--dmlty-gap: 18px;
	}

	.dmlty-shell,
	.dmlty-app-embedded {
		display: grid;
		grid-template-columns: var(--dmlty-side-w) minmax(0, 1fr);
		grid-template-areas:
			"side head"
			"side main";
		align-items: start;
	}

	.dmlty-shell {
		grid-template-rows: auto 1fr;
	}

	/*
	 * ⚠ وقتی ناوبری اصلاً رندر نشده، ستونِ کناری نباید جا بگیرد.
	 *
	 * خطای واقعیِ دیده‌شده: برای بازدیدکنندهٔ **وارد‌نشده** `Chrome::tabbar()` رشتهٔ
	 * خالی برمی‌گرداند، ولی شبکه همچنان ستونِ ۲۶۴ پیکسلی‌اش را نگه می‌داشت. نتیجه
	 * یک نوارِ خالیِ پهن کنارِ صفحه بود و سربرگ که تا لبه نمی‌رسید — صفحهٔ مهمان و
	 * صفحهٔ دعوت هر دو «از بالا بریده» به نظر می‌رسیدند.
	 *
	 * ⚠ با `:has()` انجام می‌شود نه با یک کلاسِ نشانه‌گذاری، چون حالتِ شورت‌کد هم
	 * باید درست شود و پوششِ آن در پرونده‌ای ساخته می‌شود که اجازهٔ دست‌زدن به آن را
	 * نداریم. یک قاعده، هر سه حالتِ رندر.
	 */
	.dmlty-shell:not(:has(> .dmlty-nav)),
	.dmlty-app-embedded:not(:has(> .dmlty-nav)) {
		grid-template-columns: minmax(0, 1fr);
		grid-template-areas:
			"head"
			"main";
	}

	.dmlty-nav {
		grid-area: side;
		position: sticky;
		inset-block: 0 auto;
		inset-inline: auto;
		align-self: stretch;
		block-size: 100dvh;
		display: flex;
		flex-direction: column;
		gap: 4px;
		padding: var(--dmlty-gap) 14px;
		overflow-y: auto;
		border-block-start: 0;
		border-inline-start: 1px solid var(--dmlty-line);

		/*
		 * ستونِ کناری نقشِ نقطه‌ایِ خودش را دارد، به‌علاوهٔ یک هالهٔ رنگیِ بسیار ملایم
		 * از بالا.
		 *
		 * ⚠ نقش **کم‌رنگ‌تر از نوارِ موبایل** است و پشتِ هر ردیفِ متن هم یک لایهٔ
		 * هم‌رنگِ سطح می‌نشیند (پایین‌تر). نقشِ پرنقش زیرِ متنِ ریز خوانایی را
		 * می‌خورد — همان چیزی که در ستونِ بلندِ دسکتاپ با ده ردیفِ برچسب دیده شد.
		 * تزئین هرگز نباید به کنتراستِ متن دست بزند.
		 */
		/*
		 * ⚠ خوانایی با **رقیق‌کردنِ خودِ نقش** حل می‌شود، نه با زمینه‌دادن به تک‌تکِ
		 * ردیف‌ها.
		 *
		 * راهِ قبلی هر ردیفِ متن را یک مستطیلِ مات کرد و ستون به فهرستی از جعبه‌های
		 * چسبیده تبدیل شد — شلوغ‌تر از خودِ مشکل. حالا یک پردهٔ هم‌رنگِ سطح **روی**
		 * نقطه‌ها می‌نشیند و همه‌جا را یکنواخت کم‌جان می‌کند: نقش هست، ولی زیرِ متنِ
		 * ریز مزاحمتی ندارد و هیچ ردیفی قاب نمی‌گیرد.
		 */
		background:
			linear-gradient(
				color-mix(in srgb, var(--dmlty-surface) 38%, transparent),
				color-mix(in srgb, var(--dmlty-surface) 38%, transparent)
			),
			radial-gradient(circle at 88% 4%, var(--dmlty-tint-2) 0, transparent 46%),
			radial-gradient(var(--dmlty-tint-2) 1.4px, transparent 1.4px) 0 0 / 17px 17px,
			var(--dmlty-surface);
	}

	/* داخلِ قالبِ خریدار ارتفاعِ صفحه مالِ ما نیست؛ ستون به بلندیِ محتوا می‌ماند. */
	.dmlty-app-embedded .dmlty-nav {
		position: static;
		block-size: auto;
	}

	.dmlty-brand {
		display: flex;
		align-items: center;
		gap: var(--dmlty-gap-xs);
		margin-block-end: var(--dmlty-gap);
		padding: 4px 8px;
		color: var(--dmlty-text);
		font-weight: 700;
	}

	.dmlty-brand-mark {
		display: inline-flex;
		inline-size: 34px;
		block-size: 34px;
		flex: none;
	}

	.dmlty-brand-mark img {
		inline-size: 100%;
		block-size: 100%;
		border-radius: 9px;
		object-fit: cover;
	}

	.dmlty-brand-name {
		font-size: 14.5px;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
		min-inline-size: 0;
	}

	.dmlty-nav-primary {
		display: flex;
		flex-direction: column;
		gap: 3px;
		max-inline-size: none;
		margin: 0;
	}

	/*
	 * ⚠ مقصدِ «پروفایل» در ستونِ کناری چاپ نمی‌شود.
	 *
	 * تمامِ ردیف‌های آن صفحه — اطلاعات حساب، کیف پول، تاریخچه، جوایز دریافتی، معرفی،
	 * تبدیل، خبرها و خروج از حساب — همین پایین به‌صورت میان‌بر باز شده‌اند. یک مقصد
	 * که فقط فهرستی از همان‌ها را نشان بدهد، یک کلیکِ اضافه است و نه چیزی بیشتر.
	 * ⚠ خودِ صفحه و نشانی‌اش دست‌نخورده‌اند و روی موبایل هیچ چیزی عوض نشده.
	 */
	.dmlty-nav-profile {
		display: none;
	}

	/* ⚠ مقصد در ستونِ کناری یک ردیفِ افقی است، نه ستونِ نشانه-روی-برچسب. */
	.dmlty-tab {
		flex-direction: row;
		justify-content: flex-start;
		gap: var(--dmlty-gap-sm);
		min-block-size: 46px;
		padding: 0 10px;
		border-radius: var(--dmlty-radius-ctl);
		font-size: 13.5px;
		transition: background 0.15s ease, color 0.15s ease;
	}

	/*
	 * نشانه‌های ستونِ کناری همان مدالِ ردیف‌های صفحهٔ پروفایل‌اند — مربعِ گردشدهٔ
	 * ته‌رنگی. حالا که آن صفحه از دسکتاپ حذف شده، ستون باید همان زبانِ بصری را
	 * ادامه بدهد نه یک زبانِ تازه.
	 */
	/* ⚠ جابه‌جاییِ کوچکِ نسخهٔ موبایل اینجا برداشته می‌شود: در ردیفِ افقیِ ستونِ
	   کناری، بالا-پایینِ یک پیکسلی فقط ناهم‌ترازی می‌سازد. */
	.dmlty-tab-icon,
	.dmlty-side-icon {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		inline-size: 32px;
		block-size: 32px;
		flex: none;
		border-radius: 9px;
		background: var(--dmlty-surface-3);
		color: var(--dmlty-muted);
		transform: none;
		transition: background 0.15s ease, color 0.15s ease;
	}

	.dmlty-tab.is-active .dmlty-tab-icon,
	.dmlty-tab:active .dmlty-tab-icon {
		transform: none;
	}

	.dmlty-tab:hover,
	.dmlty-side-link:hover {
		background: var(--dmlty-surface-2);
		color: var(--dmlty-text);
	}

	.dmlty-tab:hover .dmlty-tab-icon,
	.dmlty-side-link:hover .dmlty-side-icon {
		background: var(--dmlty-tint);
		color: var(--dmlty-brand);
	}

	.dmlty-tab.is-active {
		background: var(--dmlty-tint);
		color: var(--dmlty-brand);
	}

	.dmlty-tab.is-active .dmlty-tab-icon,
	.dmlty-side-link.is-active .dmlty-side-icon {
		background: var(--dmlty-brand);
		color: var(--dmlty-on-brand);
	}

	/* خروج از حساب همان رنگِ هشداری را دارد که در صفحهٔ پروفایل داشت. */
	.dmlty-side-danger,
	.dmlty-side-danger .dmlty-side-label {
		color: var(--dmlty-danger);
	}

	.dmlty-side-danger .dmlty-side-icon {
		background: var(--dmlty-danger-bg);
		color: var(--dmlty-danger);
	}

	.dmlty-side-danger:hover {
		background: var(--dmlty-danger-bg);
		color: var(--dmlty-danger);
	}

	.dmlty-side-danger:hover .dmlty-side-icon {
		background: var(--dmlty-danger);
		color: #fff;
	}

	/* نشانگرِ حالت در ستون یک خطِ عمودی روی لبهٔ **راست** است — همان لبه‌ای که چشم در
	   خواندنِ راست‌به‌چپ اول به آن می‌رسد. */
	.dmlty-tab.is-active::before {
		inset-block-start: 50%;
		inset-block-end: auto;
		inset-inline-start: 0;
		inline-size: 3px;
		block-size: 20px;
		border-radius: 0 4px 4px 0;
		transform: translateY(-50%);
	}

	.dmlty-nav-heading {
		display: block;
		margin: var(--dmlty-gap-lg) 0 var(--dmlty-gap-xs);
		padding-inline: 12px;
		color: var(--dmlty-muted);
		font-size: 11px;
		font-weight: 700;
		letter-spacing: 0.04em;
	}

	.dmlty-nav-shortcuts {
		display: flex;
		flex-direction: column;
		gap: 2px;
		margin: 0;
		padding: 0;
		list-style: none;
	}

	.dmlty-side-link {
		display: flex;
		align-items: center;
		gap: var(--dmlty-gap-sm);
		min-block-size: 44px;
		padding: 0 10px;
		border-radius: var(--dmlty-radius-ctl);
		color: var(--dmlty-muted);
		font-size: 13px;
		font-weight: 600;
		transition: background 0.15s ease, color 0.15s ease;
	}

	.dmlty-side-label {
		min-inline-size: 0;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	.dmlty-side-link.is-active {
		background: var(--dmlty-tint);
		color: var(--dmlty-brand);
	}

	/*
	 * ⚠ سربرگ فاصلهٔ یکسان از هر چهار طرف می‌گیرد و **هم‌ترازِ ستونِ محتوا نمی‌شود**.
	 *
	 * پیش از این پَدِ کناری‌اش خودش را با فضای اضافه بزرگ می‌کرد تا عنوان دقیقاً
	 * بالای کارت‌ها بنشیند؛ نتیجه‌اش روی نمایشگرِ پهن یک فاصلهٔ بسیار زیاد در دو سرِ
	 * نوار بود. عنوان و دکمه‌ها به لبه‌های خودِ نوار تعلق دارند، نه به شبکهٔ محتوا.
	 * وسط‌چینیِ خودِ محتوا سرِ جایش دست‌نخورده است.
	 */
	.dmlty-topbar {
		grid-area: head;
		flex-wrap: nowrap;
		padding: var(--dmlty-gap);
	}

	.dmlty-wheel-card {
		padding: var(--dmlty-gap-lg);
	}

	/* نامِ باشگاه و لوگو بالای ستونِ کناری‌اند؛ تکرارشان در سربرگ فقط جا می‌گیرد. */
	.dmlty-app-summary .dmlty-topbar-logo {
		display: none;
	}

	.dmlty-topbar-title {
		font-size: 19px;
	}

	/*
	 * ترتیبِ سربرگ روی دسکتاپ، از راست به چپ: عنوان، موجودی‌ها، سه دکمه.
	 *
	 * ⚠ با `order` انجام می‌شود نه با جابه‌جاییِ نشانه‌گذاری: روی موبایل نوارِ موجودی
	 * باید سطرِ دوم باشد و دکمه‌ها کنارِ عنوان بمانند. یک ترتیبِ سند، دو چیدمان.
	 * عنوان `flex:1 1 auto` است و فضای آزاد را می‌بلعد، پس آن دو گروه به لبهٔ چپ
	 * چسبیده می‌مانند.
	 */
	.dmlty-topbar-start {
		order: 1;
	}

	/*
	 * ⚠ خطِ عمودیِ کوتاه بینِ موجودی‌ها و سه دکمه. مرزِ «اطلاعات» و «کنش» را
	 * می‌کشد بی‌آنکه فاصلهٔ بیشتری بگیرد.
	 */
	.dmlty-pill {
		order: 2;
		flex: 0 1 auto;
		max-inline-size: 48%;
		padding-block-start: 0;
		padding-inline-end: var(--dmlty-gap);
		margin-inline-end: var(--dmlty-gap-xs);
		border-inline-end: 1px solid var(--dmlty-line);
	}

	.dmlty-topbar-end {
		order: 3;
	}

	/*
	 * ⚠ ستونِ محتوا **وسط‌چین** است، نه چسبیده به راست.
	 *
	 * با حاشیهٔ صفرِ سمتِ چپ، روی نمایشگرِ پهن یک نوارِ خالیِ چندصدپیکسلی کنارِ هر
	 * صفحه می‌ماند و کلِ پنل به گوشه هل داده می‌شود. کشیدنِ محتوا تا لبه هم جواب
	 * نیست: سطرِ متنِ بیش از حد بلند خوانده نمی‌شود. پس سقفِ عرض می‌ماند و آنچه
	 * اضافه است بینِ دو طرف تقسیم می‌شود.
	 * ⚠ سربرگ همان سقف و همان وسط‌چینی را دارد، وگرنه عنوانِ صفحه با محتوای زیرش
	 * روی یک خطِ عمودی نمی‌نشیند و ناهم‌ترازی دیده می‌شود.
	 */
	.dmlty-main {
		grid-area: main;
		inline-size: 100%;
		max-inline-size: 1320px;
		margin-inline: auto;
		padding: var(--dmlty-pad);

		/* نوارِ پایینی در کار نیست؛ آن پَد فقط فضای خالی می‌سازد. */
		padding-block-end: var(--dmlty-gap-lg);
		gap: var(--dmlty-gap-lg);
	}

	.dmlty-home {
		gap: var(--dmlty-gap-lg);
	}

	.dmlty-hero {
		padding: 34px 28px;
	}

	.dmlty-hero-title {
		font-size: 22px;
	}

	.dmlty-hero::after {
		inline-size: 260px;
		block-size: 260px;
		inset-block-start: -90px;
	}
}

/* ═══════════════════════════════ نمایشگر پهن ═══════════════════════════════ */

@media screen and (min-width: 1280px) {
	.dmlty-app {
		--dmlty-pad: 32px;
	}

	.dmlty-home {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.dmlty-prizes {
		grid-template-columns: repeat(auto-fill, minmax(min(260px, 100%), 1fr));
	}
}

/* ═══════════════════════════════ حرکت کمتر ═══════════════════════════════ */

@media (prefers-reduced-motion: reduce) {
	.dmlty-app *,
	.dmlty-app *::before,
	.dmlty-app *::after {
		transition-duration: 0.01ms !important;
		animation-duration: 0.01ms !important;
	}

	/* ⚠ جابه‌جایی هم باید برداشته شود، نه فقط سرعتش صفر شود: پرشِ آنی همان چیزی
	   است که کاربرِ حساس به حرکت از آن پرهیز می‌کند. */
	.dmlty-card:hover,
	.dmlty-quest-row:hover,
	.dmlty-ticket:hover,
	.dmlty-prize:hover,
	.dmlty-balance:hover,
	.dmlty-btn:active {
		transform: none;
	}

	.dmlty-prize:hover .dmlty-cover img {
		transform: none;
	}

	/* ⚠ گذار روی پوششِ چرخنده است نه روی SVG؛ خاموش‌کردنِ آن یکی هیچ اثری نداشت. */
	.dmlty-wheel-spin {
		transition: none;
	}
}
