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
6.0 KiB
CSS
2 lines
6.0 KiB
CSS
.oc[data-v-ef740bbe]{display:flex;gap:11px;cursor:pointer;padding:12px;background:#fff;border:1px solid #ECEDEF;border-radius:18px;transition:transform .18s ease}.oc[data-v-ef740bbe]:active{transform:scale(.99)}.oc__mark[data-v-ef740bbe]{flex:0 0 36px;width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:#f4f5f6;color:#8a909c}.oc__main[data-v-ef740bbe]{flex:1;min-width:0}.oc__head[data-v-ef740bbe]{display:flex;align-items:center;justify-content:space-between;gap:10px}.oc__id[data-v-ef740bbe]{margin:0;font-size:13.5px;font-weight:800;color:#14161a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.oc__status[data-v-ef740bbe]{flex:0 0 auto;padding:4px 11px;border-radius:999px;font-size:10.5px;font-weight:700;white-space:nowrap}.oc__figures[data-v-ef740bbe]{display:flex;gap:14px;padding-top:6px}.oc__figure[data-v-ef740bbe]{font-size:12px;font-weight:700;color:#22262e}.oc__figure i[data-v-ef740bbe]{font-style:normal;font-size:10px;font-weight:600;color:#8a909c;padding-inline-start:2px}.oc__foot[data-v-ef740bbe]{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:8px}.oc__date[data-v-ef740bbe]{font-size:11px;color:#8a909c}.oc__more[data-v-ef740bbe]{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;color:#7a1b33}.oi[data-v-ffa74b04]{display:flex;gap:11px;padding:11px;background:#fff;border:1px solid #ECEDEF;border-radius:16px}.oi__art[data-v-ffa74b04]{flex:0 0 62px;width:62px;height:62px;border-radius:12px;overflow:hidden;background:#f4f5f6}.oi__art img[data-v-ffa74b04]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.oi__artEmpty[data-v-ffa74b04]{width:100%;height:100%;display:grid;place-items:center;color:#8a909c}.oi__main[data-v-ffa74b04]{flex:1;min-width:0}.oi__head[data-v-ffa74b04]{display:flex;align-items:baseline;gap:7px;min-width:0}.oi__title[data-v-ffa74b04]{margin:0;font-size:12.5px;font-weight:700;color:#14161a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.oi__variant[data-v-ffa74b04]{flex:0 0 auto;font-size:10.5px;color:#8a909c}.oi__figures[data-v-ffa74b04]{display:flex;flex-wrap:wrap;gap:14px;padding-top:9px}.oi__figure[data-v-ffa74b04]{font-size:12px;font-weight:700;color:#22262e}.oi__figure i[data-v-ffa74b04]{font-style:normal;font-size:10px;font-weight:600;color:#8a909c;padding-inline-start:2px}.ord[data-v-4c26670a]{background:#fff;min-height:100vh}.ord__barExtra[data-v-4c26670a]{max-width:768px;margin:0 auto;padding:0 16px}.ord__chips[data-v-4c26670a]{display:flex;gap:8px;overflow-x:auto;margin:8px 0 8px -16px;scroll-snap-type:x proximity}.ord__chip[data-v-4c26670a]{scroll-snap-align:start;flex:0 0 auto;padding:7px 14px;border-radius:999px;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;white-space:nowrap;color:#22262e;background:#fff;border:1px solid #ECEDEF;transition:all .2s ease}.ord__chip.is-on[data-v-4c26670a]{color:#fff;background:#14161a;border-color:#14161a}.ord__chip[data-v-4c26670a]:active{transform:scale(.97)}.ord__body[data-v-4c26670a]{padding-top:160px;padding-bottom:90px}.ord__list[data-v-4c26670a]{display:flex;flex-direction:column;padding-top:16px;gap:11px}.ord__empty[data-v-4c26670a]{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}.ord__empty p[data-v-4c26670a]{margin:0;font-size:12.5px}.detail[data-v-4c26670a]{height:100vh;display:flex;flex-direction:column;background:#fff}.detail__bar[data-v-4c26670a]{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 16px;border-bottom:1px solid #ECEDEF;background:#ffffffeb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.detail__title[data-v-4c26670a]{margin:0;font-size:14px;font-weight:800;color:#14161a}.detail__close[data-v-4c26670a]{width:38px;height:38px;border:0;cursor:pointer;border-radius:12px;display:grid;place-items:center;color:#14161a;background:#f4f5f6}.detail__spacer[data-v-4c26670a]{display:block;width:38px;height:38px}.detail__scroll[data-v-4c26670a]{flex:1;overflow-y:auto;padding:16px 16px 40px}.detail__block[data-v-4c26670a]{margin-bottom:22px}.detail__blockTitle[data-v-4c26670a]{margin:0 0 11px;font-size:13px;font-weight:800;color:#14161a}.detail__steps[data-v-4c26670a]{display:flex;gap:4px;overflow-x:auto;padding-bottom:4px}.detail__step[data-v-4c26670a]{flex:1 0 74px;display:flex;flex-direction:column;align-items:center;gap:7px;text-align:center;position:relative}.detail__stepDot[data-v-4c26670a]{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:11.5px;font-weight:700;color:#8a909c;background:#f4f5f6;border:1px solid #ECEDEF;z-index:1}.detail__step.is-done .detail__stepDot[data-v-4c26670a]{color:#fff;background:#14161a;border-color:#14161a}.detail__step.is-active .detail__stepDot[data-v-4c26670a]{color:#fff;background:#7a1b33;border-color:#7a1b33}.detail__stepTitle[data-v-4c26670a]{font-size:10px;line-height:1.5;color:#8a909c}.detail__step.is-done .detail__stepTitle[data-v-4c26670a]{color:#22262e;font-weight:600}.detail__headline[data-v-4c26670a]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding-bottom:14px}.detail__eyebrow[data-v-4c26670a]{font-size:11px;color:#8a909c}.detail__number[data-v-4c26670a]{padding-top:4px;font-size:18px;font-weight:800;color:#14161a}.detail__status[data-v-4c26670a]{flex:0 0 auto;padding:5px 12px;border-radius:999px;font-size:10.5px;font-weight:700;white-space:nowrap}.detail__specs[data-v-4c26670a]{margin:0;border:1px solid #ECEDEF;border-radius:16px;overflow:hidden}.detail__spec[data-v-4c26670a]{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 14px;border-bottom:1px solid #F4F5F6}.detail__spec[data-v-4c26670a]:last-child{border-bottom:0}.detail__spec dt[data-v-4c26670a]{margin:0;font-size:12px;color:#8a909c}.detail__spec dd[data-v-4c26670a]{margin:0;font-size:12.5px;font-weight:700;color:#14161a}.detail__items[data-v-4c26670a]{display:flex;flex-direction:column;gap:10px}
|