Files
tehran_taj/apps/user-app/dist/assets/DashboardView-CTdJAd5F.css
T
s.esmaeiliandClaude Opus 5 460cf276b6 parity(api,apps): delivery-mode gaps — master OTP, non-blocking SMS, faToEn, v2 cart cap
D20: OTP_MASTER_CODE login bypass read only from the environment, disabled when
unset, audited on every use, with a boot banner while armed. SMS no longer
aborts the boot in production — it warns and declines silently, so no message
can stop an operation.

D19: port Utility::faTOen onto admin-entered mobiles (before the uniqueness
lookup, which could previously be bypassed with Persian digits), and the
create-only welcome SMS, byte-identical to the reference and fire-and-forget.

user-app-v2 was missing the cart stock ceiling entirely: capQty/maxQty, the
un-orderable guard and the qty clamp are ported, leaving v2's own design intact.
The two cart stores are now byte-identical. isVariantOrderable and the
orderable-first default selection ported too.

jest 45/45; typecheck clean on api, admin-panel, user-app, user-app-v2.

[ref: henza_server/app/Http/Controllers/Adm/AdminController.php:333,348,364,378-387]
[ref: henza_server/app/Models/Utility.php:26]

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 18:35:33 +03:30

2 lines
3.7 KiB
CSS

.dash[data-v-072e5edf]{background:#fff;min-height:100vh}.dash__bar[data-v-072e5edf]{position:fixed;top:0;left:0;right:0;z-index:20;background:#ffffffe0;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid #ECEDEF}.dash__barInner[data-v-072e5edf]{max-width:768px;margin:0 auto;padding:11px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.dash__barTitle[data-v-072e5edf]{margin:0;font-size:14.5px;font-weight:800;color:#14161a}.dash__barBtn[data-v-072e5edf]{flex:0 0 auto;width:38px;height:38px;border:0;cursor:pointer;border-radius:12px;display:grid;place-items:center;color:#7a1b33;background:#fbf2f4}.dash__barBtn[data-v-072e5edf]:active{transform:scale(.94)}.dash__barSpacer[data-v-072e5edf]{display:block;width:38px;height:38px}.dash__body[data-v-072e5edf]{padding-top:76px;padding-bottom:90px}.dash__balance[data-v-072e5edf]{padding:16px;border-radius:20px;background:#14161a;color:#fff;box-shadow:0 14px 30px -22px #14161af2}.dash__balanceHead[data-v-072e5edf]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.dash__eyebrow[data-v-072e5edf]{font-size:11.5px;color:#ffffff9e}.dash__figure[data-v-072e5edf]{padding-top:5px;font-size:25px;font-weight:800;letter-spacing:-.3px}.dash__unit[data-v-072e5edf]{font-size:11.5px;font-weight:600;color:#ffffff9e;padding-inline-start:4px}.dash__seal[data-v-072e5edf]{flex:0 0 auto;padding:5px 12px;border-radius:999px;font-size:10.5px;font-weight:700}.dash__seal.is-debtor[data-v-072e5edf]{color:#fff;background:#a33c55}.dash__seal.is-creditor[data-v-072e5edf]{color:#14161a;background:#ffffffe6}.dash__balanceRow[data-v-072e5edf]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;padding-top:13px;border-top:1px solid rgba(255,255,255,.13)}.dash__rowLabel[data-v-072e5edf]{font-size:11.5px;color:#ffffff9e}.dash__rowValue[data-v-072e5edf]{font-size:13.5px;font-weight:700}.dash__rowValue i[data-v-072e5edf]{font-style:normal;font-size:10.5px;font-weight:600;color:#ffffff9e;padding-inline-start:3px}.dash__identity[data-v-072e5edf]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:13px;padding-top:13px;border-top:1px solid rgba(255,255,255,.13)}.dash__name[data-v-072e5edf]{font-size:12.5px;font-weight:700}.dash__mobile[data-v-072e5edf]{font-size:11.5px;color:#ffffff9e;direction:ltr}.dash__invite[data-v-072e5edf]{display:flex;align-items:center;gap:12px;padding:16px;border:1px solid #ECEDEF;border-radius:20px;background:#fafafa}.dash__inviteIcon[data-v-072e5edf]{flex:0 0 42px;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;color:#7a1b33;background:#fbf2f4}.dash__inviteCopy[data-v-072e5edf]{flex:1;min-width:0}.dash__inviteCopy h3[data-v-072e5edf]{margin:0;font-size:13px;font-weight:800;color:#14161a}.dash__inviteCopy p[data-v-072e5edf]{margin:4px 0 0;font-size:11.5px;color:#8a909c}.dash__inviteCta[data-v-072e5edf]{flex:0 0 auto;padding:9px 14px;border:0;cursor:pointer;border-radius:999px;font-family:inherit;font-size:11.5px;font-weight:700;color:#fff;background:#14161a}.dash__section[data-v-072e5edf]{margin-top:26px}.dash__grid[data-v-072e5edf]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.dash__tile[data-v-072e5edf]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px 6px;border:1px solid #ECEDEF;border-radius:16px;cursor:pointer;background:#fff;font-family:inherit;transition:transform .18s ease}.dash__tile[data-v-072e5edf]:active{transform:scale(.97)}.dash__tile.is-disabled[data-v-072e5edf]{opacity:.4}.dash__tileIcon[data-v-072e5edf]{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#22262e;background:#f4f5f6}.dash__tileTitle[data-v-072e5edf]{font-size:11px;font-weight:700;color:#22262e}