Files
tehran_taj/apps/user-app/dist/assets/TransactionsView-CN4RdoIe.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
2.5 KiB
CSS

.tx[data-v-d21f0dcb]{background:#fff;min-height:100vh}.tx__body[data-v-d21f0dcb]{padding-top:76px;padding-bottom:90px}.tx__list[data-v-d21f0dcb]{display:flex;flex-direction:column;gap:10px}.tx__row[data-v-d21f0dcb]{display:flex;gap:11px;padding:12px;cursor:pointer;background:#fff;border:1px solid #ECEDEF;border-radius:18px;transition:transform .18s ease}.tx__row[data-v-d21f0dcb]:active{transform:scale(.99)}.tx__mark[data-v-d21f0dcb]{flex:0 0 36px;width:36px;height:36px;border-radius:50%;display:grid;place-items:center}.tx__mark.is-in[data-v-d21f0dcb]{color:#16a34a;background:#f0fdf4}.tx__mark.is-out[data-v-d21f0dcb]{color:#7a1b33;background:#fbf2f4}.tx__main[data-v-d21f0dcb]{flex:1;min-width:0}.tx__head[data-v-d21f0dcb]{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.tx__kind[data-v-d21f0dcb]{margin:0;font-size:13px;font-weight:700;color:#14161a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tx__amount[data-v-d21f0dcb]{font-size:12.5px;font-weight:800;white-space:nowrap}.tx__amount.is-in[data-v-d21f0dcb]{color:#16a34a}.tx__amount.is-out[data-v-d21f0dcb]{color:#7a1b33}.tx__note[data-v-d21f0dcb]{margin:6px 0 0;font-size:11.5px;line-height:1.7;color:#5b616e;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tx__foot[data-v-d21f0dcb]{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:8px}.tx__date[data-v-d21f0dcb]{font-size:11px;color:#8a909c}.tx__state[data-v-d21f0dcb]{font-size:10.5px;font-weight:700;color:#5b616e}.tx__state.is-pending[data-v-d21f0dcb]{color:#916f48}.tx__empty[data-v-d21f0dcb]{margin-top:8px;padding:34px 20px;border:1px dashed #ECEDEF;border-radius:18px;display:flex;flex-direction:column;align-items:center;gap:10px;color:#8a909c}.tx__empty p[data-v-d21f0dcb]{margin:0;font-size:12.5px}.sheet[data-v-d21f0dcb]{padding:18px 16px 22px}.sheet__title[data-v-d21f0dcb]{margin:0 0 14px;font-size:13.5px;font-weight:800;color:#14161a}.sheet__specs[data-v-d21f0dcb]{margin:0;border:1px solid #ECEDEF;border-radius:16px;overflow:hidden}.sheet__spec[data-v-d21f0dcb]{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 14px;border-bottom:1px solid #F4F5F6}.sheet__spec[data-v-d21f0dcb]:last-child{border-bottom:0}.sheet__spec dt[data-v-d21f0dcb]{margin:0;font-size:12px;color:#8a909c}.sheet__spec dd[data-v-d21f0dcb]{margin:0;font-size:12.5px;font-weight:700;color:#14161a;text-align:left}.sheet__spec dd.is-in[data-v-d21f0dcb]{color:#16a34a}.sheet__spec dd.is-out[data-v-d21f0dcb]{color:#7a1b33}