
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#FFFFFF;--card:#fff;--text:#111111;--muted:#666666;
  --border:#E0E0E0;--accent:#111111;--gold:#c5a059;--heart:#E52D2D;--r:20px
}
body{background:var(--bg);font-family:'DM Sans','Montserrat',-apple-system,BlinkMacSystemFont,sans-serif;color:var(--text);-webkit-font-smoothing:antialiased;overscroll-behavior:none}
.app{max-width:390px;margin:0 auto;background:var(--bg);min-height:100vh;display:flex;flex-direction:column}
.hdr{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 10px;border-bottom:1px solid var(--border)}
.logo{display:flex;align-items:center}
.logo-img{height:32px;width:auto;object-fit:contain;display:block}
.logo span{font-size:20px;font-weight:800;letter-spacing:-.03em;font-family:'Syne',sans-serif}
.hdr-tag{font-size:11px;font-weight:700;color:var(--muted);font-family:'Montserrat',sans-serif;text-transform:uppercase;letter-spacing:.04em}
.dots-row{display:flex;gap:4px;padding:12px 20px 8px}
.dot{flex:1;height:3px;border-radius:2px;background:var(--border);transition:background .3s}
.dot.active{background:var(--gold)}.dot.done{background:var(--gold);opacity:.5}

.type-sw{display:flex;gap:3px;margin:0 16px 12px;background:#F5F5F5;border-radius:40px;padding:3px;border:1px solid var(--border)}
.type-btn{flex:1;padding:10px 0;border:none;background:transparent;font-size:13px;font-weight:700;cursor:pointer;border-radius:40px;color:var(--muted);transition:background .2s,color .2s;font-family:'Montserrat',sans-serif;user-select:none;text-align:center;letter-spacing:.02em}
.type-btn.sel{background:#111;color:#fff}
.type-btn.sel .type-icon{color:initial}
.type-icon{font-style:normal;color:initial}

.preview-wrap{
  position:relative;margin:0 16px;border-radius:var(--r);
  background:#FFFFFF;overflow:hidden;
  border:1px solid var(--border);
  height:390px;display:flex;align-items:center;justify-content:center;
}
.preview-canvas-wrap{
  position:relative;
  width:240px;height:280px;
  user-select:none;
}
.shirt-img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:contain;
  transform:scale(1.4);
  transition:opacity .3s;
  pointer-events:none;
}
.shirt-img.loading{opacity:0}

.shirt-overlay{
  position:absolute;
  inset:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  pointer-events:none;
  transition:all .2s;
}

.layout-center .shirt-overlay{
  justify-content:center;
  padding-bottom:0;
  transform:none;
}
.layout-center .shirt-overlay #overlay-center {
  margin-top:-60px;
}

.layout-inline .shirt-overlay{
  justify-content:center;
  align-items:center;
  padding-bottom:0;
  transform:none;
}
.layout-inline .shirt-overlay #overlay-chest {
  margin-top:-90px;
}

.chest-brand-small{
  font-size:14px;font-weight:700;
  color:#0A0A0A;
  letter-spacing:.03em;
  display:flex;align-items:center;justify-content:center;gap:1px;
  margin-bottom:2px;
  line-height:1;
  text-align:center;
}
.chest-brand-small .cbs-heart{color:#E52D2D;}

.chest-main-text{
  font-weight:900;
  color:#0A0A0A;
  line-height:1;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:100%;
  text-align:center;
  display:block;
}

.center-word{
  font-weight:700;
  color:#0A0A0A;
  margin-top:4px;
  letter-spacing:.02em;
  line-height:1;
  text-align:center;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:100%;
}

.shirt-dark .chest-brand-small,
.shirt-dark .chest-main-text,
.shirt-dark .center-word{color:#FFFFFF!important}

.brand-line{
  display:flex;align-items:center;justify-content:center;
  gap:8px;white-space:nowrap;
  line-height:1;
}
.brand-w,.brand-2{
  font-weight:900;
  color:#0A0A0A;
  transition:font-size .2s,color .2s;
}
.brand-heart{
  display:flex;align-items:center;justify-content:center;
  transition:all .2s;
}
.brand-heart img{
  object-fit:contain;
  display:block;
}
.brand-date{
  font-weight:900;
  color:#0A0A0A;
  transition:font-size .2s,color .2s;
}

.overlay-phrase{
  font-size:10px;font-weight:500;
  color:#0A0A0A;
  margin-top:3px;
  text-align:center;
  opacity:.7;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:100%;
}

.shirt-dark .brand-w,
.shirt-dark .brand-2,
.shirt-dark .brand-date,
.shirt-dark .overlay-phrase{color:#FFFFFF!important}

.size-badge{
  position:absolute;bottom:10px;right:10px;
  background:rgba(0,0,0,.7);color:#fff;
  font-size:10px;font-weight:700;padding:3px 10px;
  border-radius:20px;letter-spacing:.08em;
  pointer-events:none;font-family:'Montserrat',sans-serif;
}
.color-ind{
  position:absolute;top:12px;left:12px;
  background:rgba(255,255,255,.95);border:1px solid var(--border);
  border-radius:10px;padding:5px 10px;font-size:11px;color:var(--muted);
  display:flex;align-items:center;gap:6px;font-family:'DM Sans',sans-serif;font-weight:500;
}
.c-sw{width:14px;height:14px;border-radius:50%;border:1px solid rgba(0,0,0,.1)}
.loading-msg{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;pointer-events:none;transition:opacity .4s}
.loading-msg.off{opacity:0}
.spinner{width:28px;height:28px;border:3px solid #ddd;border-top-color:#0A0A0A;border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.loading-txt{font-size:12px;color:var(--muted)}

.vbtns{position:absolute;top:12px;right:12px;display:flex;flex-direction:column;gap:6px}
.vbtn{
  height:28px;padding:0 9px;border-radius:8px;
  background:rgba(255,255,255,.95);border:1px solid var(--border);
  display:flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:700;cursor:pointer;user-select:none;
  transition:background .1s;white-space:nowrap;font-family:'Montserrat',sans-serif;
}
.vbtn:active,.vbtn.active{background:#111;color:#fff;border-color:#111}
.vdot{width:6px;height:6px;border-radius:50%;background:rgba(0,0,0,.2);transition:background .2s}
.vdot.active{background:var(--gold)}
.vdot{width:6px;height:6px;border-radius:50%;background:rgba(0,0,0,.2);transition:background .2s}
.vdot.active{background:var(--gold)}

.scroll{flex:1;overflow-y:auto;padding:14px 16px 130px;display:flex;flex-direction:column;gap:12px}
.card{background:var(--card);border-radius:var(--r);padding:16px;border:1px solid var(--border)}
.sec-t{font-size:12px;font-weight:700;margin-bottom:10px;letter-spacing:.05em;text-transform:uppercase;font-family:'Montserrat',sans-serif;color:var(--muted)}
.pill-row{display:flex;gap:6px;flex-wrap:wrap}
.pill{padding:8px 16px;border-radius:40px;border:2px solid var(--border);font-size:13px;font-weight:700;cursor:pointer;background:transparent;color:var(--text);user-select:none;transition:all .15s;font-family:'Montserrat',sans-serif}
.pill:active{transform:scale(.95)}.pill.sel{background:#111;color:#fff;border-color:#111}
.clr-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.clr{width:32px;height:32px;border-radius:50%;cursor:pointer;position:relative;flex-shrink:0;transition:transform .15s;user-select:none}
.clr:active{transform:scale(.9)}
.clr.sel::after{content:'';position:absolute;inset:-3px;border-radius:50%;border:2px solid var(--gold)}
.clr-lbl{font-size:13px;color:var(--muted);font-family:'DM Sans',sans-serif;font-weight:500}

.pick-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.pick-card{background:#F8F8F8;border-radius:12px;padding:12px 6px 10px;text-align:center;cursor:pointer;border:2px solid transparent;transition:all .15s;user-select:none;display:flex;flex-direction:column;align-items:center;gap:5px}
.pick-card:active{transform:scale(.96)}.pick-card.sel{border-color:#111;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.08)}
.pick-lbl{font-size:10px;font-weight:700;color:var(--muted);letter-spacing:.05em;font-family:'Montserrat',sans-serif}
.pick-sub{font-size:9px;color:#BBB;font-family:'DM Sans',sans-serif}
.pick-card.sel .pick-lbl{color:var(--text)}.pick-card.sel .pick-sub{color:var(--muted)}
.heart-thumb{width:36px;height:36px;object-fit:contain;display:block}
.heart-emoji{font-size:28px;line-height:1}
.heart-thumb-wrap{width:36px;height:36px;display:flex;align-items:center;justify-content:center}

.layout-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.layout-card{background:#F8F8F8;border-radius:12px;padding:10px 6px 8px;text-align:center;cursor:pointer;border:2px solid transparent;transition:all .15s;user-select:none;display:flex;flex-direction:column;align-items:center;gap:4px}
.layout-card.sel{border-color:#111;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.08)}
.layout-icon{font-size:20px;line-height:1}

.divider{height:1px;background:var(--border);margin:12px 0}
.phr-wrap{display:flex;align-items:center;gap:8px;border:2px solid var(--border);border-radius:12px;padding:12px 18px;background:#FAFAFA;transition:border-color .2s}
.phr-wrap:focus-within{border-color:#111;background:#fff}
.phr-pre{font-size:14px;white-space:nowrap;color:var(--muted)}
.phr-inp{flex:1;border:none;background:transparent;font-size:14px;color:var(--text);outline:none;font-family:'DM Sans',sans-serif;min-width:0}
.phr-inp::placeholder{color:#CCC}
.qr-info{background:#F9F3E5;border-radius:12px;padding:12px 14px;font-size:12px;color:#8a6d30;line-height:1.6;border:1px solid #E8DEC8;font-family:'DM Sans',sans-serif}

.bottom{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:390px;padding:12px 16px 24px;background:rgba(255,255,255,.95);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border);z-index:100;display:flex;flex-direction:column;gap:8px}
.price-row{display:flex;align-items:center;justify-content:space-between;padding:0 4px}
.price-lbl{font-size:13px;color:var(--muted);font-family:'Montserrat',sans-serif;font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.price-val{font-size:15px;font-weight:800;letter-spacing:-.01em;color:var(--gold);font-family:'DM Sans',sans-serif}
.btn-main{width:100%;padding:17px;background:#111;color:#fff;border:none;border-radius:40px;font-size:16px;font-weight:700;cursor:pointer;font-family:'Montserrat',sans-serif;letter-spacing:.02em;transition:transform .1s,background .15s}
.btn-main:active{transform:scale(.97)}.btn-main:hover{background:#333}

.overlay{display:none;position:fixed;inset:0;background:rgba(10,10,10,.85);z-index:200;align-items:center;justify-content:center;padding:20px;overflow-y:auto}
.overlay.show{display:flex}
.succ-card{background:#fff;border-radius:24px;padding:28px 24px;text-align:center;max-width:340px;width:100%;max-height:90vh;overflow-y:auto}
.succ-icon{font-size:48px;margin-bottom:12px}
.succ-t{font-size:22px;font-weight:800;letter-spacing:-.03em;margin-bottom:8px;font-family:'Syne',sans-serif}
.succ-s{font-size:14px;color:var(--muted);line-height:1.5;margin-bottom:20px;font-family:'DM Sans',sans-serif}
.qr-big{width:120px;height:120px;margin:0 auto 20px;border:3px solid #111;border-radius:12px;padding:6px;display:block}
.btn-open{width:100%;padding:14px;background:#111;color:#fff;border:none;border-radius:40px;font-size:15px;font-weight:700;cursor:pointer;font-family:'Montserrat',sans-serif;margin-bottom:8px}
.btn-back{width:100%;padding:12px;background:transparent;color:var(--muted);border:none;font-size:13px;cursor:pointer;font-family:'DM Sans',sans-serif}
.df-label{display:block;font-size:11px;font-weight:700;color:#888;font-family:'DM Sans',sans-serif;text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;text-align:left}
.df-input{width:100%;padding:10px 13px;border:1.5px solid #E0E0E0;border-radius:12px;font-size:13px;font-family:'DM Sans',sans-serif;outline:none;color:#111;background:#fff;transition:border-color .2s;margin-bottom:12px;box-sizing:border-box}
.df-input:focus{border-color:#111}
.df-input.error{border-color:#e52d2d}
.df-select{width:100%;padding:10px 13px;border:1.5px solid #E0E0E0;border-radius:12px;font-size:13px;font-family:'DM Sans',sans-serif;outline:none;color:#111;background:#fff;appearance:none;margin-bottom:12px;box-sizing:border-box}
.df-hint{font-size:11px;color:#bbb;font-family:'DM Sans',sans-serif;text-align:left;margin-top:-10px;margin-bottom:12px}
.df-err{font-size:11px;color:#e52d2d;font-family:'DM Sans',sans-serif;text-align:left;margin-top:-10px;margin-bottom:10px;display:none}
.df-section{font-size:13px;font-weight:800;font-family:'Syne',sans-serif;text-align:left;margin-bottom:14px;margin-top:4px;color:#111}


.shirt-fallback{
  width:200px;height:240px;
  border-radius:12px;
  display:flex;align-items:center;justify-content:center;
  font-size:80px;opacity:.3;
}

.style-preview{
  font-size:18px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  gap:1px;
}
.sp-heart{color:#E52D2D;font-style:normal;}
.style-classic{
  font-family:'Barlow',Arial,sans-serif;
  font-weight:900;font-style:normal;
}
.style-meveric{
  font-family:'Petit Formal Script',cursive;
  font-weight:400;font-style:normal;font-size:22px;
}
.style-street{
  font-family:'Yellowtail',cursive;
  font-weight:400;font-style:normal;
}

.desktop-body{display:contents}
.desktop-preview-col{display:contents}
.desktop-controls-col{display:contents}

@media(min-width:400px){.app{border-left:1px solid var(--border);border-right:1px solid var(--border)}}

@media(min-width:900px){
  body{background:#F4F4F4;}
  .app{
    max-width:1280px;
    min-height:100vh;
    flex-direction:column;
    border-left:none;border-right:none;
  }
  .hdr{
    padding:16px 32px 14px;
  }

  .desktop-body{
    display:flex !important;
    flex:1;
    gap:0;
    align-items:flex-start;
    padding:24px 28px 24px 24px;
  }
  .desktop-preview-col{
    display:flex !important;
    position:sticky;
    top:24px;
    flex:0 0 520px;
    flex-direction:column;
    gap:14px;
  }
  .desktop-controls-col{
    display:flex !important;
    flex:1;
    min-width:0;
    flex-direction:column;
    gap:0;
  }

  .preview-wrap{
    margin:0;
    height:540px;
    border-radius:24px;
  }
  .preview-canvas-wrap{
    width:340px;
    height:400px;
  }
  .shirt-img{
    transform:scale(1.35);
  }

  .type-sw{
    margin:0;
    border-radius:40px;
  }

  .scroll{
    padding:0 0 40px 0;
    overflow-y:visible;
    gap:12px;
  }
  .scroll .card{
    border-radius:16px;
  }

  .bottom{
    position:static;
    max-width:none;
    width:100%;
    transform:none;
    left:auto;
    border-top:none;
    border-radius:16px;
    border:1px solid var(--border);
    background:#fff;
    margin-top:4px;
    padding:16px 20px;
  }

  .dots-row{
    padding:0;
  }

}

/* W2-CONSTR-002: temporary placeholders for unfinished styles */
.pick-card.soon-card,
.pick-card.disabled{
  cursor:not-allowed;
  opacity:.72;
  background:#F7F7F7;
  border-color:transparent;
  box-shadow:none;
}
.pick-card.soon-card:active,
.pick-card.disabled:active{
  transform:none;
}
.pick-card.soon-card .pick-lbl,
.pick-card.disabled .pick-lbl{
  color:#777;
}
.pick-soon{
  display:block;
  font-family:'Montserrat',sans-serif;
  font-size:10px;
  line-height:1;
  font-weight:800;
  letter-spacing:.08em;
  color:#B9944E;
  text-transform:uppercase;
}


/* =========================================================
   W2 checkout clean flow modal sizing v1
   Desktop receives a real desktop-sized payment selector.
   Mobile keeps the compact existing modal.
   ========================================================= */
#ov .succ-card.w2-payment-card {
  text-align: left;
}

#ov .succ-card.w2-payment-card #ov-payment {
  display: block;
}

@media (min-width: 900px) {
  #ov .succ-card.w2-wide-card,
  #ov .succ-card.w2-payment-card {
    max-width: 720px !important;
    width: min(720px, calc(100vw - 96px)) !important;
    padding: 32px 34px !important;
    border-radius: 26px !important;
  }

  #w2-payment-selector-frame {
    min-height: 520px;
  }
}

@media (max-width: 899px) {
  #ov .succ-card.w2-payment-card {
    max-width: 340px !important;
    width: 100% !important;
  }

  #w2-payment-selector-frame {
    min-height: 420px;
  }
}


/* =========================================================
   Custom unified modal shell v2
   Use the Ready-made modal as the one visual standard.
   All custom checkout steps keep the same outer shell size.
   ========================================================= */
#ov.overlay {
  align-items: center !important;
  justify-content: center !important;
  padding: 20px !important;
}

#ov .succ-card,
#ov .succ-card.w2-unified-modal-card,
#ov .succ-card.w2-payment-card,
#ov .succ-card.w2-wide-card {
  width: min(560px, calc(100vw - 40px)) !important;
  max-width: 560px !important;
  max-height: 88vh !important;
  overflow-y: auto !important;
  border-radius: 24px !important;
  padding: 28px 24px 48px !important;
}

#ov-payment {
  text-align: left;
}

.w2-payment-method-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin: 18px 0 20px;
}

.w2-payment-method {
  min-height: 78px;
  border: 2px solid var(--border);
  background: #fff;
  color: var(--text);
  border-radius: 16px;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-family: 'Montserrat', sans-serif;
  font-size: 12px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .02em;
}

.w2-payment-method.is-active {
  background: #111;
  border-color: #111;
  color: #fff;
}

.w2-payment-method-wide {
  grid-column: span 2;
}

.w2-pay-logo,
.w2-pay-card-mark,
.w2-pay-vietqr,
.w2-pay-paypal {
  font-family: 'Syne', sans-serif;
  font-size: 18px;
  line-height: 1;
  text-transform: none;
}

.w2-pay-icon.usdt {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: #26A17B;
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 900;
  font-size: 18px;
}

.w2-payment-selected-card {
  border: 1px solid var(--border);
  border-radius: 18px;
  padding: 22px 18px;
  text-align: center;
  background: #fff;
}

.w2-payment-selected-title {
  font-family: 'Syne', sans-serif;
  font-size: 24px;
  line-height: 1;
  font-weight: 800;
  margin-bottom: 8px;
}

.w2-payment-note {
  font-size: 13px;
  color: var(--muted);
  line-height: 1.45;
  font-family: 'DM Sans', sans-serif;
}

.w2-network-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  gap: 8px;
  margin-bottom: 14px;
}

.w2-network-btn {
  border: 2px solid var(--border);
  background: #fff;
  color: var(--muted);
  border-radius: 999px;
  padding: 9px 16px;
  font-family: 'Montserrat', sans-serif;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
}

.w2-network-btn.is-active {
  background: #111;
  border-color: #111;
  color: #fff;
}

@media (max-width: 899px) {
  #ov .succ-card,
  #ov .succ-card.w2-unified-modal-card,
  #ov .succ-card.w2-payment-card,
  #ov .succ-card.w2-wide-card {
    width: calc(100vw - 32px) !important;
    max-width: 480px !important;
    max-height: calc(100dvh - 80px) !important;
    border-radius: 24px !important;
    padding: 28px 24px 40px !important;
  }
}

/* =========================================================
   Payment designer icons restore v1
   Keeps unified modal sizes/flow, restores real designer assets.
   ========================================================= */
.w2-payment-method .w2-pay-image-wrap,
.w2-payment-method .w2-pay-card-logos {
  width: 84px;
  height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  margin-bottom: 2px;
}

.w2-payment-method .w2-pay-img {
  display: block;
  object-fit: contain;
  max-width: 100%;
  max-height: 30px;
}

.w2-payment-method .w2-pay-usdt-img {
  width: 32px;
  height: 32px;
}

.w2-payment-method .w2-pay-visa-img {
  width: 36px;
  height: 22px;
}

.w2-payment-method .w2-pay-mastercard-img {
  width: 36px;
  height: 22px;
}

.w2-payment-method .w2-pay-vietqr-img {
  width: 76px;
  height: 24px;
}

.w2-payment-method .w2-pay-paypal-img {
  width: 78px;
  height: 26px;
}

.w2-payment-method .w2-pay-gpay {
  font-family: 'Syne', sans-serif;
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.02em;
  line-height: 1;
}

.w2-payment-method .w2-pay-gpay .g { color: #c5a059; }
.w2-payment-method.is-active .w2-pay-gpay { color: #fff; }
.w2-payment-method.is-active .w2-pay-gpay .g { color: #c5a059; }
