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>
2 lines
4.5 KiB
CSS
2 lines
4.5 KiB
CSS
.dash[data-v-0633711e]{background:#fff;min-height:100vh}.dash__bar[data-v-0633711e]{position:fixed;top:0;left:0;right:0;z-index:20;background:#ffffffd1;-webkit-backdrop-filter:blur(18px) saturate(140%);backdrop-filter:blur(18px) saturate(140%);border-bottom:1px solid rgba(28,45,86,.05);box-shadow:0 8px 20px -18px #1c2d568c}.dash__barInner[data-v-0633711e]{max-width:768px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px}.dash__brand[data-v-0633711e]{font-size:14.5px;font-weight:800;color:#14161a}.dash__exit[data-v-0633711e]{flex:0 0 auto;width:34px;height:34px;border:0;cursor:pointer;border-radius:11px;display:grid;place-items:center;color:#7a1b33;background:#fbf2f4;transition:transform .18s ease}.dash__exit[data-v-0633711e]:active{transform:scale(.92)}.dash__body[data-v-0633711e]{padding-top:58px;padding-bottom:90px}.dash__reveal[data-v-0633711e]{opacity:0;transform:translate3d(0,14px,0) scale(.98);will-change:transform,opacity}.is-revealed .dash__reveal[data-v-0633711e]{opacity:1;transform:translateZ(0) scale(1);transition:opacity .62s cubic-bezier(.32,.72,0,1) var(--reveal-delay, 0ms),transform .62s cubic-bezier(.32,.72,0,1) var(--reveal-delay, 0ms)}@media (prefers-reduced-motion: reduce){.dash__reveal[data-v-0633711e]{opacity:1;transform:none}.is-revealed .dash__reveal[data-v-0633711e]{transition:none}}.dash__hero[data-v-0633711e]{margin-top:16px;margin-bottom:28px;padding:20px 18px 16px;border-radius:26px;background:linear-gradient(155deg,#14161a,#14161a 55%,#5e1427 130%);color:#fff;box-shadow:0 22px 40px -26px #14161a52}.dash__heroTop[data-v-0633711e]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.dash__heroIdentity[data-v-0633711e]{display:flex;flex-direction:column;gap:3px;min-width:0}.dash__heroName[data-v-0633711e]{font-size:13.5px;font-weight:800}.dash__heroMobile[data-v-0633711e]{font-size:11px;color:#ffffff8c;direction:ltr;text-align:right}.dash__heroSeal[data-v-0633711e]{flex:0 0 auto;padding:5px 12px;border-radius:999px;font-size:10.5px;font-weight:700}.dash__heroSeal.is-debtor[data-v-0633711e]{color:#fff;background:#a33c55}.dash__heroSeal.is-creditor[data-v-0633711e]{color:#14161a;background:#ffffffe6}.dash__heroFigure[data-v-0633711e]{margin-top:20px;display:flex;align-items:baseline;gap:8px}.dash__heroNum[data-v-0633711e]{font-size:34px;font-weight:800;letter-spacing:-.5px}.dash__heroUnit[data-v-0633711e]{font-size:12px;font-weight:600;color:#ffffff9e}.dash__heroDebt[data-v-0633711e]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;padding-top:13px;border-top:1px solid rgba(255,255,255,.14);font-size:11.5px;color:#ffffff9e}.dash__heroDebt b[data-v-0633711e]{font-size:13px;font-weight:700;color:#fff}.dash__heroDebt i[data-v-0633711e]{font-style:normal;font-size:10.5px;font-weight:600;color:#ffffff9e;padding-inline-start:3px}.dash__invite[data-v-0633711e]{margin-top:16px;padding:26px 20px;border-radius:26px;background:#14161a;color:#fff;display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px}.dash__inviteIcon[data-v-0633711e]{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:#ffffff1a;margin-bottom:2px}.dash__invite h3[data-v-0633711e]{margin:0;font-size:14px;font-weight:800}.dash__invite p[data-v-0633711e]{margin:0;font-size:11.5px;color:#fff9;max-width:240px}.dash__inviteCta[data-v-0633711e]{margin-top:6px;padding:10px 22px;border:0;cursor:pointer;border-radius:999px;font-family:inherit;font-size:12px;font-weight:700;color:#14161a;background:#fff;transition:transform .18s ease}.dash__inviteCta[data-v-0633711e]:active{transform:scale(.96)}.dash__rows[data-v-0633711e]{margin-top:0;display:flex;flex-direction:column;gap:9px}.dash__row[data-v-0633711e]{display:flex;align-items:center;gap:12px;padding:13px 14px;border:1px solid #ECEDEF;border-radius:17px;cursor:pointer;background:#fff;font-family:inherit;text-align:right;transition:transform .18s ease,border-color .18s ease}.dash__row[data-v-0633711e]:active{transform:scale(.985);border-color:#7a1b3333}.dash__rowIcon[data-v-0633711e]{flex:0 0 auto;width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:#7a1b33;background:#fbf2f4}.dash__rowText[data-v-0633711e]{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.dash__rowText b[data-v-0633711e]{font-size:12.5px;font-weight:700;color:#14161a}.dash__rowText small[data-v-0633711e]{font-size:10.5px;color:#8a909c}.dash__rate[data-v-0633711e]{margin-top:14px}
|