/* "Design your own" builder, shared by every shirt-shop template.
   Builder-only additions on top of store.css. Colors come only from its tokens
   (--pink is store.css's accent alias in every template, not a literal pink).

   Extends the shirt mock (.tee) with:
     --dx   horizontal offset of the transfer (in), + is right of the center line
     --st   safe-area top (in) from the collar seam
     --sw   safe-area width (in)
     --sh   safe-area height (in)
   Same geometry as store.css: body spans 600/1000 of the drawing, collar seam at y=100/1100. */

.bld-hd{padding:clamp(24px,4vw,44px) 0 clamp(18px,3vw,28px)}
.bld-hd h1{font-size:clamp(38px,5vw,60px);margin-top:6px}
.bld-hd h1 em{color:var(--pink);font-style:italic}
.bld-hd p{max-width:58ch;margin:12px 0 0}

.bld{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,4vw,56px);align-items:start;padding-bottom:72px}
.bld-preview{position:sticky;top:88px;min-width:0}
.bld-panel{min-width:0}

/* ── preview ─────────────────────────────────────────── */
.bld-preview-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.bld-preview-top .scale-note{margin:0}
.bld-flip{display:inline-flex;padding:3px;border:1.5px solid var(--line-2);border-radius:999px;background:var(--card)}
.bld-flip button{position:relative;min-height:40px;padding:0 20px;border:0;border-radius:999px;background:transparent;font-weight:700;font-size:14px}
.bld-flip button[aria-pressed="true"]{background:var(--ink);color:var(--card)}
.bld-flip button.has::after{content:"";position:absolute;top:7px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--pink)}

.bld-stage{border-radius:calc(var(--radius) + 6px);background:var(--card);border:1px solid var(--line);padding:7% 9% 5%;touch-action:pan-y}
.bld-tee{max-width:540px;margin:0 auto;container-type:inline-size}

/* transfer: true scale, plus horizontal offset */
.bld-tee .bld-art{left:calc(50% + var(--dx,0) / var(--chest) * 60%);cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-user-drag:none;outline:1.5px dashed transparent;outline-offset:3px;border-radius:2px;transition:outline-color .15s}
.bld-tee .bld-art:hover,.bld-tee .bld-art:focus-visible,.bld-tee.dragging .bld-art{outline-color:var(--pink)}
.bld-tee.dragging .bld-art{cursor:grabbing}
.bld-tee .bld-art.bad{outline:2px solid var(--cherry)}

/* safe area outline */
.bld-safe{position:absolute;pointer-events:none;border:1.5px dashed color-mix(in srgb,var(--pink) 55%,transparent);border-radius:4px;
  left:calc(50% - var(--sw) / 2 / var(--chest) * 60%);width:calc(var(--sw) / var(--chest) * 60%);
  top:calc((100 + var(--st) * 600 / var(--chest)) / 1100 * 100%);height:calc(var(--sh) * 600 / var(--chest) / 1100 * 100%);transition:border-color .15s}
.bld-safe span{position:absolute;right:6px;bottom:4px;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--pink);opacity:0;transition:opacity .15s;background:var(--card);padding:1px 6px;border-radius:999px}
.bld-tee.dragging .bld-safe{border-color:var(--pink)}
.bld-tee.dragging .bld-safe span{opacity:1}
.bld-safe.bad{border-style:solid;border-color:var(--cherry)}

/* team name + number, sized in inches: 1in = 60cqw / chest */
.bld-team-art{position:absolute;pointer-events:none;display:flex;flex-direction:column;align-items:center;text-align:center;line-height:.92;
  left:calc(50% - var(--sw) / 2 / var(--chest) * 60%);width:calc(var(--sw) / var(--chest) * 60%);
  top:calc((100 + (var(--st) + .5) * 600 / var(--chest)) / 1100 * 100%);font-family:var(--sans);font-weight:700;
  text-shadow:0 1px 0 color-mix(in srgb,var(--ink) 25%,transparent)}
.bld-team-art span{font-size:calc(60cqw * 2.2 / var(--chest));letter-spacing:.06em;white-space:nowrap}
.bld-team-art b{font-size:calc(60cqw * 8 / var(--chest));letter-spacing:-.02em;margin-top:calc(60cqw * .5 / var(--chest))}

.bld-empty{position:absolute;left:50%;top:40%;transform:translateX(-50%);width:max-content;max-width:min(90%,260px);margin:0;padding:8px 14px;border-radius:999px;background:color-mix(in srgb,var(--card) 90%,transparent);text-align:center;font-size:13px;font-weight:700;color:var(--ink-2);pointer-events:none}

.bld-warn{margin-top:12px;border:1.5px solid var(--cherry);background:color-mix(in srgb,var(--cherry) 7%,var(--card));border-radius:var(--radius-sm);padding:12px 14px;font-size:14px;color:var(--ink)}
.bld-warn b{display:block;color:var(--cherry);margin-bottom:2px}
.bld-warn p{margin:6px 0 0}
.bld-fix{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}
.bld-fix span{font-weight:700;font-size:13px;margin-right:2px}
.bld-fix .chip{padding:5px 12px}
.bld-hint{margin:10px 0 0;text-align:center;font-size:13px;color:var(--ink-2)}

/* ── panel sections ──────────────────────────────────── */
.bld-sec{padding:4px 0 26px;border-bottom:1px solid var(--line);margin-bottom:22px;display:flex;flex-direction:column;gap:18px}
.bld-sec:last-child{border-bottom:0;margin-bottom:0}
.bld-sec h2{font-size:clamp(22px,2.4vw,28px);display:flex;align-items:center;gap:10px}
.bld-step{width:28px;height:28px;border-radius:50%;background:var(--pink);color:var(--card);display:grid;place-items:center;font:700 14px var(--sans);flex:none}
.bld-sec-hd{display:flex;align-items:center;justify-content:space-between;gap:12px}
.bld-car-nav{display:flex;gap:4px}
.bld-car-nav .icon-btn{border:1.5px solid var(--line-2);background:var(--card)}
.bld-car-nav .icon-btn:disabled{opacity:.35;cursor:default}
.bld-filters{margin-top:-6px}

.bld-card{scroll-snap-align:start;display:flex;flex-direction:column;background:var(--card);border:1.5px solid var(--line);border-radius:var(--radius);overflow:hidden;transition:border-color .15s,box-shadow .15s}
.bld-card.is-on{border-color:var(--pink);box-shadow:0 0 0 1px var(--pink)}
.bld-card-art{position:relative;aspect-ratio:1/1;background:var(--blush);padding:12% 10% 4%}
.bld-card-art .tee{width:100%}
.bld-card-art .fav{top:8px;right:8px;width:34px;height:34px}
.bld-on{position:absolute;left:8px;bottom:8px;padding:3px 9px;border-radius:999px;background:var(--pink);color:var(--card);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}
.bld-card-body{padding:10px 12px 12px;display:flex;flex-direction:column;gap:6px;flex:1}
.bld-card-body h3{font:700 14.5px/1.25 var(--sans);letter-spacing:0}
.bld-meta{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12px;color:var(--ink-3);font-weight:500}
.bld-low{color:var(--cherry);font-weight:700}
.bld-add{color:var(--ink);font-weight:700}
.bld-car-empty{grid-column:1/-1;padding:36px 18px;text-align:center;border:1.5px dashed var(--line-2);border-radius:var(--radius);color:var(--ink-2);font-size:14px}

/* shirt options (reuses .opt, .styles, .colors, .sizes from pinktaco.css) */
.style-opt .bld-from{display:block;margin-top:4px;color:var(--ink);font-weight:700}
.bld-size-nofit{border-style:dashed;border-color:color-mix(in srgb,var(--cherry) 60%,transparent)}
.size-opt .bld-nofit{color:var(--cherry);font-weight:700}
.size-opt[aria-pressed="true"] .bld-nofit{color:var(--butter)}
.bld-stock{margin:10px 0 0;font-size:13px;font-weight:700;color:var(--mint)}
.bld-stock.low{color:var(--cherry)}

/* your shirt: slots */
.bld-slots{display:grid;gap:8px}
.bld-slot{border:1.5px solid var(--line);border-radius:var(--radius-sm);background:var(--card);padding:10px 12px;cursor:pointer;transition:border-color .15s}
.bld-slot.is-active{border-color:var(--ink)}
.bld-slot.is-bad{border-color:var(--cherry)}
.bld-slot>small{display:block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin-bottom:6px}
.bld-slot-row{display:flex;align-items:center;gap:12px;min-height:44px}
.bld-slot-row img{width:44px;height:44px;flex:none;object-fit:contain;background:var(--blush);border-radius:8px;padding:4px}
.bld-slot-info{display:flex;flex-direction:column;min-width:0;font-size:13px;color:var(--ink-2);line-height:1.35}
.bld-slot-info b{color:var(--ink);font-size:14px}
.bld-slot-info em{color:var(--cherry);font-style:normal;font-weight:700}
.bld-x{margin-left:auto;flex:none;width:34px;height:34px;border-radius:50%;border:0;background:var(--blush);font-size:20px;line-height:1}
.bld-x:hover{background:var(--ink);color:var(--card)}
.bld-team-badge{width:44px;height:44px;flex:none;border-radius:8px;background:var(--ink);color:var(--card);display:grid;place-items:center;font:700 18px var(--sans)}
.bld-scale{display:flex;flex-direction:column;gap:4px;margin-top:6px;font-weight:700;color:var(--ink)}
.bld-scale input{width:100%;accent-color:var(--pink)}

/* team name + number */
.bld-switch{display:flex;align-items:center;gap:12px;width:100%;padding:14px 0 6px;border:0;background:none;text-align:left;font-weight:700;font-size:15px}
.bld-switch i{position:relative;width:44px;height:26px;flex:none;border-radius:999px;background:var(--line-2);transition:background .15s}
.bld-switch i::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--card);box-shadow:var(--shadow);transition:transform .15s}
.bld-switch[aria-checked="true"] i{background:var(--pink)}
.bld-switch[aria-checked="true"] i::after{transform:translateX(18px)}
.bld-switch em{margin-left:auto;font-style:normal;font-weight:500;color:var(--ink-2)}
.bld-team-fields{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:10px;padding-top:10px}
.bld-team-fields label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:700;min-width:0}
.bld-team-fields input{min-height:46px;width:100%;border:1.5px solid var(--line-2);border-radius:var(--radius-sm);background:var(--card);padding:0 12px;font:600 16px var(--sans);color:var(--ink);text-transform:uppercase}
.bld-team-fields input:focus{outline:2px solid var(--pink);outline-offset:1px;border-color:transparent}
.bld-team-colors{grid-column:1/-1;display:flex;gap:10px}
.bld-team-fields .bld-note{grid-column:1/-1;margin:0}
.bld-note{font-size:13px;color:var(--ink-2);margin:0}

/* summary */
.bld-summary{margin-top:18px;display:grid;gap:14px;padding:18px;border-radius:var(--radius);background:var(--blush)}
.bld-lines{display:grid;gap:6px;font-size:14px}
.bld-lines div{display:flex;justify-content:space-between;gap:12px}
.bld-lines div span:last-child{font-weight:700;white-space:nowrap}
.bld-qty-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-weight:700}
.bld-qty-row .qty output{width:38px;text-align:center;font-weight:700}
.bld-qty-row .qty button:disabled{opacity:.35;cursor:not-allowed}
.bld-qty-row .bld-note{font-weight:500}
.bld-total{display:flex;justify-content:space-between;align-items:baseline;border-top:1px solid var(--line-2);padding-top:12px}
.bld-total b{font-size:26px}

/* mobile sticky buy bar */
.bld-bar{display:none}

/* toast */
.bld-toast{position:fixed;left:50%;bottom:24px;z-index:60;max-width:calc(100% - 32px);transform:translate(-50%,12px);opacity:0;padding:12px 20px;border-radius:999px;background:var(--ink);color:var(--card);font-size:14px;font-weight:700;box-shadow:var(--shadow);transition:opacity .2s,transform .2s;pointer-events:none;text-align:center}
.bld-toast.on{opacity:1;transform:translate(-50%,0)}

@media (max-width:900px){
  .bld{grid-template-columns:1fr;gap:20px}
  .bld-preview{position:static}
  .bld-tee{max-width:min(100%,380px)}
  .bld-bar{display:flex;align-items:center;gap:14px;position:fixed;left:0;right:0;bottom:0;z-index:30;padding:10px var(--gut);background:color-mix(in srgb,var(--card) 95%,transparent);border-top:1px solid var(--line);backdrop-filter:blur(8px)}
  .bld-bar small{display:block;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
  .bld-bar b{font-size:20px;line-height:1.1}
  .bld-bar .btn{flex:1;min-width:0;padding:0 14px}
  .bld-bar .btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  body[data-page="design"]{padding-bottom:72px}
  .bld-toast{bottom:88px}
}
@media (max-width:600px){.bld-car-nav{display:none}}

/* ── two-step flow: shirt slider, design picker, sign-in popup ──────────── */
/* Step 1: shirt styles slide sideways and snap. */
.styles.bld-style-row{display:grid;grid-auto-flow:column;grid-template-columns:none;grid-auto-columns:minmax(180px,46%);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;padding:2px 2px 6px;-webkit-overflow-scrolling:touch}
.styles.bld-style-row::-webkit-scrollbar{display:none}
.styles.bld-style-row .style-opt{scroll-snap-align:start;min-height:100%}
@media (min-width:600px){.styles.bld-style-row{grid-auto-columns:minmax(180px,31%)}}

/* Step 2: one tile per side, opening the picker. */
.bld-slot-add{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;border:0;background:none;padding:0;text-align:left;font-weight:700;font-size:14px;color:var(--ink)}
.bld-slot-add span{width:44px;height:44px;flex:none;display:grid;place-items:center;border-radius:8px;border:1.5px dashed var(--line-2);font-size:22px;font-weight:500;color:var(--ink-2)}
.bld-slot:hover .bld-slot-add span{border-color:var(--ink);color:var(--ink)}
/* Reserve both tiles before builder.js fills them, so nothing below jumps. */
.bld-slots:empty{min-height:156px}
.bld-change{min-height:34px;padding:0 14px;font-size:13px;margin-left:auto;flex:none}
.bld-change+.bld-x{margin-left:0}

/* Modals: full screen on a phone, a large sheet on a desktop. */
html.bld-locked{overflow:hidden}
.bld-modal{position:fixed;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:24px;background:color-mix(in srgb,var(--ink) 42%,transparent);opacity:0;transition:opacity .18s}
.bld-modal.on{opacity:1}
.bld-modal[hidden]{display:none}
.bld-modal-panel{position:relative;display:flex;flex-direction:column;width:min(1040px,100%);max-height:min(860px,100%);background:var(--paper,var(--card));color:var(--ink);border-radius:calc(var(--radius) + 4px);box-shadow:0 30px 80px -20px color-mix(in srgb,var(--ink) 50%,transparent);overflow:hidden;transform:translateY(10px);transition:transform .18s}
.bld-modal.on .bld-modal-panel{transform:none}
.bld-modal-hd{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 22px 12px}
.bld-modal-hd h2{font-size:clamp(22px,2.6vw,30px)}
.bld-modal-hd .bld-note{margin-top:4px}
.bld-modal-hd .icon-btn,.bld-signin-x{flex:none;border:1.5px solid var(--line-2);background:var(--card)}

.bld-picker .bld-modal-panel{height:min(860px,100%)}
.bld-picker-tools{display:grid;gap:12px;padding:0 22px 14px;border-bottom:1px solid var(--line)}
.bld-search{position:relative;display:block}
.bld-search svg{position:absolute;left:14px;top:50%;width:18px;height:18px;transform:translateY(-50%);color:var(--ink-3);pointer-events:none}
.bld-search input{width:100%;min-height:46px;padding:0 14px 0 42px;border:1.5px solid var(--line-2);border-radius:var(--radius-sm);background:var(--card);font:500 16px var(--sans);color:var(--ink)}
.bld-search input:focus{outline:2px solid var(--pink);outline-offset:1px;border-color:transparent}
.bld-picker-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.bld-picker-row .bld-flip button{min-height:36px;padding:0 16px;font-size:13px}
.bld-sort{margin-left:auto}
.bld-sort .select{min-height:38px}
.bld-picker .bld-filters{margin-top:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.bld-picker .bld-filters::-webkit-scrollbar{display:none}
.bld-picker .bld-filters .chip{flex:none}
.bld-picker-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:16px 22px 28px;-webkit-overflow-scrolling:touch}
.bld-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px}
.bld-grid .bld-card{position:relative;cursor:pointer}
.bld-grid .bld-card:hover{border-color:var(--ink)}
.bld-grid .bld-card.is-off{opacity:.62}
.bld-card-pick{position:absolute;inset:0;z-index:1;width:100%;border:0;background:none;padding:0;cursor:pointer;border-radius:inherit}
.bld-card-pick:focus-visible{outline:2px solid var(--pink);outline-offset:2px}
.bld-card-pick:disabled{cursor:not-allowed}
.bld-grid .bld-card .fav{z-index:2}
.bld-more{height:1px}
.bld-count{margin:18px 0 0;text-align:center;font-size:13px;color:var(--ink-3)}

/* Sign-in popup */
.bld-signin .bld-modal-panel{width:min(420px,100%);padding:28px 24px 24px;gap:12px}
.bld-signin h2{font-size:clamp(24px,3vw,30px);padding-right:40px}
.bld-signin-x{position:absolute;top:14px;right:14px}
.bld-google{gap:10px}
.bld-google svg{width:18px;height:18px}
.bld-or{display:flex;align-items:center;gap:12px;margin:2px 0;font-size:12px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.1em}
.bld-or::before,.bld-or::after{content:"";flex:1;height:1px;background:var(--line)}
.bld-signin form{display:grid;gap:10px}
.bld-signin input[type=email]{min-height:48px;width:100%;padding:0 14px;border:1.5px solid var(--line-2);border-radius:var(--radius-sm);background:var(--card);font:500 16px var(--sans);color:var(--ink)}
.bld-signin input[type=email]:focus{outline:2px solid var(--pink);outline-offset:1px;border-color:transparent}
.bld-signin-err{margin:0;font-size:13px;color:var(--cherry);min-height:0}
.bld-signin-err:empty{display:none}
.bld-signin-fine{font-size:12px}
.bld-signin-sent p{margin:0 0 6px}

@media (max-width:640px){
  .bld-modal{padding:0;align-items:stretch}
  .bld-modal-panel,.bld-picker .bld-modal-panel{width:100%;height:100%;max-height:none;border-radius:0}
  .bld-signin{align-items:flex-end}
  .bld-signin .bld-modal-panel{height:auto;border-radius:calc(var(--radius) + 4px) calc(var(--radius) + 4px) 0 0;padding-bottom:calc(24px + env(safe-area-inset-bottom))}
  .bld-modal-hd{padding:16px 16px 10px}
  .bld-picker-tools{padding:0 16px 12px}
  .bld-picker-body{padding:14px 16px calc(24px + env(safe-area-inset-bottom))}
  .bld-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .bld-picker-row{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
  .bld-picker-row::-webkit-scrollbar{display:none}
  .bld-picker-row>*{flex:none}
  .bld-sort{margin-left:0}
  .bld-sort .select{min-height:36px;padding-top:0;padding-bottom:0;font-size:13px}
  .bld-modal-hd h2{font-size:24px}
}
@media (prefers-reduced-motion:reduce){.bld-modal,.bld-modal-panel{transition:none}}

/* team roster (one design, every player's name, number and size) */
.bld-roster{grid-column:1/-1}
.bld-team-fields.roster-on>label{display:none}
.bld-roster-open{display:grid;gap:2px;width:100%;text-align:left;padding:12px 14px;border:1.5px dashed var(--line-2);border-radius:var(--radius-sm);background:transparent;color:var(--ink);cursor:pointer;transition:border-color .15s,background .15s}
.bld-roster-open:hover{border-color:var(--pink);background:var(--card)}
.bld-roster-open b{font-size:14px}
.bld-roster-open span{font-size:13px;color:var(--ink-2)}
.bld-roster-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:8px}
.bld-roster-hd b{font-size:14px}
.bld-roster-hd span{font-size:13px;color:var(--ink-2)}
.bld-roster-link{margin-left:auto;border:0;background:none;padding:0;font:600 13px var(--sans);color:var(--ink-2);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.bld-roster-link:hover{color:var(--pink)}
.bld-roster-cols,.bld-roster-row{display:grid;grid-template-columns:minmax(0,1fr) 64px 76px 32px;gap:6px;align-items:center}
.bld-roster-cols{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);padding:0 2px 4px}
.bld-roster-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.bld-team-fields .bld-roster-row input,.bld-roster-row select{min-height:40px;width:100%;border:1.5px solid var(--line-2);border-radius:var(--radius-sm);background:var(--card);padding:0 10px;font:600 14px var(--sans);color:var(--ink)}
.bld-roster-row input{text-transform:uppercase}
.bld-roster-row input[data-roster-f="number"]{text-align:center;font-variant-numeric:tabular-nums}
.bld-roster-row select{padding:0 6px}
.bld-roster-row input:focus,.bld-roster-row select:focus{outline:2px solid var(--pink);outline-offset:1px;border-color:transparent}
.bld-roster-row.bad input,.bld-roster-row.bad select{border-color:var(--cherry)}
.bld-roster-row small{grid-column:1/-1;font-size:12px;color:var(--cherry);margin-top:-2px}
.bld-roster-x{width:32px;height:32px;border:0;border-radius:50%;background:transparent;color:var(--ink-2);font-size:18px;line-height:1;cursor:pointer}
.bld-roster-x:hover{background:var(--card);color:var(--cherry)}
.bld-roster-ft{display:flex;align-items:center;gap:12px;margin-top:10px}
.bld-roster-add{border:1.5px solid var(--line-2);border-radius:var(--radius-btn-x,999px);background:var(--card);padding:8px 14px;font:700 13px var(--sans);color:var(--ink);cursor:pointer}
.bld-roster-add:hover{border-color:var(--pink)}
.bld-roster-paste{display:grid;gap:8px;margin-top:10px}
.bld-roster-paste textarea{width:100%;border:1.5px solid var(--line-2);border-radius:var(--radius-sm);background:var(--card);padding:10px 12px;font:500 14px/1.5 var(--sans);color:var(--ink);resize:vertical}
.bld-roster-paste textarea:focus{outline:2px solid var(--pink);outline-offset:1px;border-color:transparent}


/* ── shirt photo (builder.js renderMockup) ───────────────
   The photo's canvas is 140% of the tee box wide (sleeves on a boxy tee reach
   past it), so the box shrinks to 1/1.4 and the photo fills the old width. */
.bld-tee.has-mockup{width:71.43%;max-width:386px;margin-bottom:9%}
.bld-tee.has-mockup .tee-shape{visibility:hidden}
.bld-mock{position:absolute;left:-20%;top:-9.0909%;width:140%;max-width:none;height:auto;pointer-events:none;user-select:none;-webkit-user-select:none;filter:drop-shadow(0 18px 24px rgba(0,0,0,.10)) drop-shadow(0 2px 4px rgba(0,0,0,.06))}
.bld-shade{position:absolute;left:-20%;top:-9.0909%;width:140%;aspect-ratio:1400/1300;pointer-events:none;
  background:center/100% 100% no-repeat;mix-blend-mode:soft-light;opacity:.95;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-size:calc(var(--dw,10) / var(--chest) * 60cqw) auto;mask-size:calc(var(--dw,10) / var(--chest) * 60cqw) auto;
  -webkit-mask-position:calc(70cqw + var(--dx,0) / var(--chest) * 60cqw - var(--dw,10) / var(--chest) * 30cqw) calc((200 + var(--dt,3) * 600 / var(--chest)) / 1000 * 100cqw);
  mask-position:calc(70cqw + var(--dx,0) / var(--chest) * 60cqw - var(--dw,10) / var(--chest) * 30cqw) calc((200 + var(--dt,3) * 600 / var(--chest)) / 1000 * 100cqw)}
.bld-tee.has-mockup .bld-art{filter:saturate(.97) contrast(.98)}
@media (max-width:900px){.bld-tee.has-mockup{max-width:272px}}

/* ── the customer's own design (builder.js uploadTile / quality) ── */
.bld-upload{border-style:dashed;border-color:var(--line-2);background:var(--card)}
.bld-upload-drop{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:220px;padding:20px 16px;text-align:center;cursor:pointer;color:var(--ink)}
.bld-upload-drop b{font-size:14px;font-weight:700}
.bld-upload-drop small{font-size:12px;line-height:1.4;color:var(--ink-3);max-width:22ch}
.bld-upload-icon{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;border:1.5px solid var(--line-2);font-size:20px;color:var(--ink-2);transition:border-color .15s,color .15s}
.bld-upload:hover{border-color:var(--ink)}
.bld-upload:hover .bld-upload-icon{border-color:var(--ink);color:var(--ink)}
.bld-upload-drop:focus-within{outline:2px solid var(--ink);outline-offset:-4px;border-radius:var(--radius)}
.bld-upload.is-busy{opacity:.7;pointer-events:none}
.bld-upload.is-busy .bld-upload-icon{animation:bld-pulse 1s ease-in-out infinite}
@keyframes bld-pulse{50%{opacity:.35}}
.bld-slot-upload{display:inline-block;margin:4px 0 0 56px;font-size:12.5px;font-weight:600;color:var(--ink-2);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.bld-slot-upload:hover{color:var(--ink)}
.bld-slot-row:has(.bld-slot-upload){flex-wrap:wrap}
.bld-dpi{font-size:12px}
.bld-dpi::before{content:"";display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;background:#3f9a5c;vertical-align:1px}
.bld-dpi[data-q="ok"]::before{background:#c79a2b}
.bld-dpi[data-q="bad"]{color:var(--cherry)}
.bld-dpi[data-q="bad"]::before{background:var(--cherry)}

/* ── picker tiles: the design alone, on the chosen shirt color ── */
.bld-card-art.is-art{display:grid;place-items:center;padding:11%;background:var(--tee,var(--blush))}
.bld-card-img{width:100%;height:100%;object-fit:contain;-webkit-user-drag:none;user-select:none}

/* ── upload review: what will print, before it is sent ── */
.bld-review{grid-column:1/-1;display:flex;flex-direction:column;gap:14px;padding:4px 0 8px}
.bld-review-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.bld-review-fig{margin:0;display:flex;flex-direction:column;gap:6px;min-width:0}
.bld-review-fig figcaption{font-size:12px;color:var(--ink-3);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bld-review-tile{aspect-ratio:1/1;display:grid;place-items:center;padding:10%;border:1.5px solid var(--line);border-radius:var(--radius);overflow:hidden}
.bld-review-tile.is-checker{background:repeating-conic-gradient(#e7e5e0 0% 25%,#fbfaf8 0% 50%) 50%/16px 16px}
.bld-review-tile img{max-width:100%;max-height:100%;object-fit:contain}
.bld-review-tile img:not([src]){visibility:hidden}
.bld-review-status{margin:0;font-size:13.5px;line-height:1.45;color:var(--ink-2)}
.bld-review-status.bad{color:var(--cherry)}
.bld-review-controls{display:flex;flex-direction:column;gap:10px;padding:12px 14px;border:1.5px solid var(--line);border-radius:var(--radius)}
.bld-review-controls[hidden],.bld-review-row[hidden]{display:none}
.bld-review-row{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--ink);cursor:pointer}
.bld-review-row input[type=checkbox]{width:18px;height:18px;accent-color:var(--ink)}
.bld-review-range input{flex:1;accent-color:var(--ink)}
.bld-review-actions{display:flex;flex-wrap:wrap;gap:8px}
.bld-review-actions .btn{min-height:44px}
@media (max-width:560px){.bld-review-tiles{gap:6px}.bld-review-actions .btn{flex:1 1 100%}}
